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 相关文章推荐
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
python虚拟环境迁移方法
Jan 03 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
python pygame实现方向键控制小球
May 17 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
什么是python的id函数
Jun 11 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
浅析Python迭代器的高级用法
Jul 16 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python文件读取失败怎么处理
2020/06/23 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
心理健康心得体会
2014/01/02 职场文书
公司活动邀请函
2014/01/24 职场文书
社会学专业求职信
2014/07/17 职场文书
高中运动会广播稿
2014/09/16 职场文书
博士导师推荐信
2015/03/25 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
浅谈redis整数集为什么不能降级
2021/07/25 Redis
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers