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抓取模板之家的CSS模板
Mar 16 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
Python计算两个日期相差天数的方法示例
May 23 Python
Python学习入门之区块链详解
Jul 25 Python
详解python调用cmd命令三种方法
Jul 08 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
Django 请求Request的具体使用方法
Nov 11 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
python对XML文件的操作实现代码
Mar 27 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 Python
基于Python的EasyGUI学习实践
May 07 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读取html并截取字符串的简单代码
2009/11/30 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
php生成curl命令行的方法
2015/12/14 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
python实现ipsec开权限实例
2014/11/11 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
python3.x上post发送json数据
2018/03/04 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
保健品市场营销方案
2014/03/31 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android