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数据类型详解(一)字符串
May 08 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
Python Flask框架模板操作实例分析
May 03 Python
python代理工具mitmproxy使用指南
Jul 04 Python
python字典的常用方法总结
Jul 31 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
Python项目跨域问题解决方案
Jun 22 Python
python等待10秒执行下一命令的方法
Jul 19 Python
Python实现Word文档转换Markdown的示例
Dec 22 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 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 stream_context_create()作用和用法分析
2011/03/29 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python中函数默认值使用注意点详解
2016/06/01 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
详解Python locals()的陷阱
2019/03/26 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
银行存款证明样本
2014/01/17 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js