Python小贴士之类
来源:互联网 发布:上海淘宝美工学校 编辑:程序博客网 时间:2024/06/06 13:58
当定义一个类时,如果这个类没有任何父类,则将object设置为它的父类,用这种方式定义的类属于新式类。如果定义的类没有设置任何父类,则这种方式定义的类属于经典类。建议使用新式类,新式类将类与内建类型进行了统一。
新式类与经典类在多重继承问题中有一个重要的区别:对于经典类,继承顺序是采用深度优先的搜素算法,对于新式类,继承顺序是采用广度优先的搜素算法。考虑如下新式类的实例:
class P1(object): def foo(self): print 'called P1-foo()'class P2(object): def foo(self): print 'called P2-foo()' def bar(self): print 'called P2-bar()'class C1(P1, P2): passclass C2(P1, P2): def bar(self): print 'called C2-bar()'class GC(C1, C2): passgc = GC()gc.foo()gc.bar()执行结果如下:
called P1-foo()called C2-bar()将类P1和P2的父类object去掉则变成了经典类,重新执行后的结果如下:
called P1-foo()called P2-bar()
类具有数据属性和方法属性。
类的数据属性与它所属的类对象绑定,不依赖于任何实例对象,既可以通过类对象访问,也可以通过实例对象访问,这里要注意不能通过实例对象对类的数据属性进行修改。考虑如下实例:
class C(object): version = 1c = C()print C.version, c.versionC.version = 2print C.version, c.versionc.version = 3print C.version, c.version执行结果:
1 1 2 2 2 3可以看到当给c.version赋值3时,C.version并没有随之改变,这是因为给c.version赋值之后,创建了一个新的实例属性version,这个实例属性隐藏了同名的类属性。因此,应该避免通过实例对象来访问类属性。
而类的方法属性只能通过实例对象调用,不能通过类对象调用,这也是类中所有方法的第一个参数必须是self的原因,它表示调用此方法的实例对象,当通过实例调用类方法时,不需要给self传入参数,Python会自动把这个实例作为参数传给self。注意,有种特殊情况是,当在子类中重载父类的某个方法时,经常会用父类对象调用父类方法来重用代码,例如:
class FatherClass(object): def __init__(self, nm, ph): self.name = nm self.phone = phclass SonClass(FatherClass): def __init__(self, nm, ph, em): FatherClass.__init__(self, nm, ph) self.email = em注意当用类对象调用类方法时,必须传递self参数,因为此时还没有一个实例与该方法绑定,自然就没有办法自动传递这个实例参数了。
类的实例可以具有自己的数据属性,这种属性只与该实例相关,与该实例的类及其他实例无关。由于__init__()是创建实例后第一个被默认调用的方法,所以这里是最早可以设置实例属性的地方。
类的属性以及实例的属性可以通过在变量名前加“__”来实现私有化,例如在类C中定义为self.__name的属性,在类C之外需要用self._C__name进行访问,但是不建议这样做,否则就失去了私有化的意义。考虑如下实例:
class C(object): def __init__(self, nm): self.__name = nm def showName(self): print self.__namec = C('a')c.showName()print c._C__name执行结果如下:
aa但是如果执行如下语句就会出错:
print c.__name
- Python小贴士之类
- python之类
- Python之类
- Python之类
- Python 学习之类(Class)
- Python学习之类属性
- Python学习之类
- python之类定义
- python之类--socket
- python之类之select
- python之类-django进阶
- Python抽象之类
- python学习总结之类对象
- Python之类(Class)的学习
- python之类方法的重载
- Python浅析之类的写法
- python基础知识之类和文件
- Python初学之类的方法
- POJ 1751 - Highways(最小生成树)
- TCP三次握手及四次挥手详细图解
- MySql用户创建、授权以及删除
- oracle同义词的用法简介。
- js基本语法
- Python小贴士之类
- 某大型互联网企业用户上网行为日志分析系统——云计算项目实战
- Java介绍及Java环境配置
- Esper学习之六:EPL语法(二)
- HDU 1098 Ignatius's puzzle
- javasript学习笔记
- win7_oracle11g_64位连接32位PLSQL_Develop
- 宏
- Android sqlite 三表查询