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 相关文章推荐
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
Python入门_学会创建并调用函数的方法
May 16 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
python实现log日志的示例代码
Apr 28 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
通过cmd进入python的实例操作
Jun 26 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Django密码系统实现过程详解
Jul 19 Python
使用Pytorch来拟合函数方式
Jan 14 Python
windows支持哪个版本的python
Jul 03 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
pytorch fine-tune 预训练的模型操作
Jun 03 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
10个简化PHP开发的工具
2014/12/25 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
2020/09/22 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
python操作excel的方法
2018/08/16 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
利用Python检测URL状态
2019/07/31 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
大学毕业生管理学求职信
2014/09/01 职场文书
共青团员自我评价范文
2014/09/14 职场文书
教师四风问题整改措施
2014/09/25 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript