Python中的面向对象编程详解(上)


Posted in Python onApril 13, 2015

创建类

Python 类使用 class 关键字来创建。简单的类的声明可以是关键字后紧跟类名:

class ClassName(bases):

    'class documentation string' #'类文档字符串'

    class_suite #类体

实例化

通过类名后跟一对圆括号实例化一个类

mc = MyClass() # instantiate class 初始化类

‘int()'构造器
def __int__(self):

    pass

注意:self类似Java的this关键字作用,它代码指向自身实例的引用

类属性

python的属性与Java和C++等面向对象语言不同,python的属性即包括了数据成员还包括函数元素,通过句点符号来访问.

特殊数据内建属性

C.name 类C的名字(字符串)
C.doc 类C的文档字符串
C.bases 类C的所有父类构成的元组
C.dict 类C的属性
C.module 类C定义所在的模块(1.5 版本新增)
C.class 实例C对应的类(仅新式类中)

特殊方法内建属性

dir():获得类属性或者实例属性名字列表.

静态变量属性

直接在class作用域定义

class C(object):

    foo = 100

实例变量属性

python的实例属性与Java和C++等不同.在Java和C++中,实例属性必须首先声明/定义,而python实例属性是动态创建。设置实例的属性可以在实例创建后任意时间进行,也可以在能够访问实例的代码中进行。构造
器init()是设置这些属性的关键点之一。

    def __init__(self, name, data):

        self.name = name

        self.data = "123'

注意:self类似Java的this关键字作用,它代码指向自身实例的引用

方法属性

分为实例方法和类方法.实例方法只属于一个实例;而类方法即属于类所有,也属于实例所有.

实例方法

class MyClass(object):

    def myNoActionMethod(self):

    pass

注意:self类似Java的this关键字作用,它代码指向自身实例的引用

静态方法

静态方法是类级别的方法,不需要实例化类就可以直接调用.有两种方法定义

●装饰器(常用)

    @staticmethod   

    def foo():

        print 'call static method'

●内建函数
    def foo():

        print 'call static method'

    foo = staticmethod(foo) #静态方法

类方法

静态方法是类级别的方法, 与静态方法不同的是,它必须显示传入cls类参数;而且如果还需要调用类中其他的静态方法,或者类方法的函数, 要定义成类方法. 与静态方法类似,也有两种方法定义.

●装饰器(常用)

    @classmethod    

    def bar(cls):

        print 'call class method and access static varible(staticVar): ', cls.staticVar

●内建函数
def bar(cls):

        print 'call class method and access static varible(staticVar): ', cls.staticVar

    bar = classmethod(bar)  #类方法

实例详解
#!/usr/bin/python

#coding=utf-8
class Target(): #定义类Target

    'This is Target definition' #定义__doc__属性
    staticVar = 'v1.0'  #定义静态变量
    def __init__(self, name = 'default', data = 0): #定义构造函数

        self.name = name    #实例变量

        self.data = data    #实例变量

        print "init instance"
    def main():

        print "this is a test function"
    '''

    可以用装饰器定义静态方法

    @staticmethod   

    def foo():

        print 'call static method'

    '''

    def foo():

        print 'call static method'

    foo = staticmethod(foo) #静态方法
    '''

    可以用装饰器定义类方法

    @classmethod    

    def bar(cls):

        print 'call class method and access static varible(staticVar): ', cls.staticVar

    '''

    def bar(cls):

        print 'call class method and access static varible(staticVar): ', cls.staticVar

    bar = classmethod(bar)  #类方法
    #只有调用本模块的时候main()方法才生效

    if __name__ == '__main__':

        main()
#实例化

target = Target('aaa', 123)

print 'name is: ', target.name

print 'data is: ', target.data
#打印__doc__属性

print 'target.__doc__ is: ', target.__doc__
#打印类__dict__属性

print 'Target.__dict__ is: ', Target.__dict__
#打印静态变量

print 'staticVar is: ', Target.staticVar
#打印内建函数dir()

print 'dir() is: ', dir(Target)
#调用静态方法

Target.foo()
#调用类方法

Target.bar()

输出

this is a test function

init instance

name is:  aaa

data is:  123

target.__doc__ is:  This is Target definition

Target.__dict__ is:  {'__module__': '__main__', 'foo': <staticmethod object at 0x7f3fd9310cc8>, 'bar': <classmethod object at 0x7f3fd9310d38>, 'staticVar': 'v1.0', 'main': <function main at 0x7f3fd930e758>, '__doc__': 'This is Target definition', '__init__': <function __init__ at 0x7f3fd930e6e0>}

staticVar is:  v1.0

dir() is:  ['__doc__', '__init__', '__module__', 'bar', 'foo', 'main', 'staticVar']

call static method

call class method and access static varible(staticVar):  v1.0
Python 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
通过python顺序修改文件名字的方法
Jul 11 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
Python如何合并多个字典或映射
Jul 24 Python
django下创建多个app并设置urls方法
Aug 02 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
python statsmodel的使用
Dec 21 Python
python中filter,map,reduce的作用
Jun 10 Python
进一步理解Python中的函数编程
Apr 13 #Python
Python中的异常处理简明介绍
Apr 13 #Python
python中的装饰器详解
Apr 13 #Python
Python生成器(Generator)详解
Apr 13 #Python
Python中函数的多种格式和使用实例及小技巧
Apr 13 #Python
在Python中使用SimpleParse模块进行解析的教程
Apr 11 #Python
Python的动态重新封装的教程
Apr 11 #Python
You might like
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
解析strtr函数的效率问题
2013/06/26 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
javascript self对象使用详解
2016/10/18 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
Python的面向对象思想分析
2015/01/14 Python
Python切片知识解析
2016/03/06 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
Python 转换文本编码实现解析
2019/08/27 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
大学生个人简历中的自我评价
2013/12/27 职场文书
汽车促销活动方案
2014/03/31 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
公司借款担保书
2015/09/22 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js