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生成器实现微线程编程的教程
Apr 13 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Python AES加密模块用法分析
May 22 Python
wxpython实现图书管理系统
Mar 12 Python
基于python生成器封装的协程类
Mar 20 Python
Python中的self用法详解
Aug 06 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
Jupyter Notebook折叠输出的内容实例
Apr 22 Python
python实现canny边缘检测
Sep 14 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php获取微信openid方法总结
2019/10/10 PHP
奇妙的js
2007/09/24 Javascript
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
js密码强度校验
2015/11/10 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
师德师风建设整改措施思想汇报
2014/10/11 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
材料采购员岗位职责
2015/04/03 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
Python socket如何解析HTTP请求内容
2022/02/12 Python