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实现把json格式转换成文本或sql文件
Jul 10 Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
解决python文件字符串转列表时遇到空行的问题
Jul 09 Python
Python中的Django基本命令实例详解
Jul 15 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
python的常用模块之collections模块详解
Dec 06 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
Python generator生成器和yield表达式详解
Aug 08 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 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错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
JS window对象简单操作完整示例
2020/01/14 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python八皇后问题解答过程详解
2019/07/29 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
Python发送邮件实现基础解析
2020/08/14 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
大学毕业感言100字
2014/02/03 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
2014年端午节活动方案
2014/03/11 职场文书
宣传稿格式范文
2015/07/23 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
关于五一放假的通知
2015/08/18 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技