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中的测试模块unittest和doctest的使用教程
Apr 14 Python
Python可变参数函数用法实例
Jul 07 Python
python实现批量监控网站
Sep 09 Python
Flask框架WTForm表单用法示例
Jul 20 Python
python list转矩阵的实例讲解
Aug 04 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
Python列表推导式实现代码实例
Sep 09 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 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获取后台Job管理的实现代码
2011/06/10 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
50个比较实用jQuery代码段
2011/09/18 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
2017/02/19 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
python删除某个字符
2018/03/19 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
pow在python中的含义及用法
2019/07/11 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
python实现人像动漫化的示例代码
2020/05/17 Python
python字典key不能是可以是啥类型
2020/08/04 Python
详解pandas赋值失败问题解决
2020/11/29 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
实习生体会的自我评价范文
2013/11/28 职场文书
公司年底活动方案
2014/08/17 职场文书