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 dict remove数组删除(del,pop)
Mar 24 Python
实例讲解python函数式编程
Jun 09 Python
python中的多重继承实例讲解
Sep 28 Python
使用python爬取B站千万级数据
Jun 08 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
pandas ix &amp;iloc &amp;loc的区别
Jan 10 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python创建与遍历List二维列表的方法
Aug 16 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
django的autoreload机制实现
Jun 03 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
Python中的pprint模块
Nov 27 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php discuz 主题表和回帖表的设计
2009/03/13 PHP
php xml实例 留言本
2009/03/20 PHP
php 学习资料零碎东西
2010/12/04 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
javascript中对对层的控制
2006/12/29 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
python读取中文txt文本的方法
2018/04/12 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
序列化Python对象的方法
2020/08/01 Python
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
地理教师岗位职责
2014/03/16 职场文书
社区服务活动总结
2014/05/07 职场文书
中学教师师德承诺书
2014/05/23 职场文书
超市收银员岗位职责
2015/04/07 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python