python构造方法学习笔记(一)
2014-11-27 00:00
344 查看
摘要: 类的构造方法
为了确保类是新型的,应该把赋值语句__metaclass__ = type放在模块的最开始。
构造方法:
每个类都可能拥有一个或者多个超类,它们从超类那里继承行为方式。如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么就会去它的超类A里面找。因为B类没有定义自己的hello方法,所以当hello被调用时,会去超类A里面寻找。
构造方法用来初始化新创建对象的状态,大多数子类不仅要拥有自己的初始化代码,还要拥有超类的初始化代码。SongBird是Bird的一个子类,它继承了eat方法。在SongBird中,构造方法被重写,但是新的构造方法没有hungry属性。理论上SongBird的构造方法必须调用其超类Bird的构造方法来对其初始化。有两种方法:调用超类构造方法的未绑定版本,使用super函数。
#!/usr/bin/python class A: def hello(self): print 'hello A' class B(A): def hello(self): print 'hello B' b=B() b.hello()
为了确保类是新型的,应该把赋值语句__metaclass__ = type放在模块的最开始。
构造方法:
每个类都可能拥有一个或者多个超类,它们从超类那里继承行为方式。如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么就会去它的超类A里面找。因为B类没有定义自己的hello方法,所以当hello被调用时,会去超类A里面寻找。
#!/usr/bin/python __metaclass__ = type class Bird: def __init__(self): self.hungry = True def eat(self): if self.hungry: print 'aaaaa' self.hungry = False else: print 'no,3q' class SongBird(Bird): def __init__(self): # super(SongBird,self).__init__() self.sound = 'squawk' def sing(self): print self.sound sb=SongBird() sb.sing() sb.eat() sb.eat() 运行: squawk Traceback (most recent call last): File "class1_test.py", line 21, in <module> sb.eat() File "class1_test.py", line 7, in eat if self.hungry: AttributeError: 'SongBird' object has no attribute 'hungry'
构造方法用来初始化新创建对象的状态,大多数子类不仅要拥有自己的初始化代码,还要拥有超类的初始化代码。SongBird是Bird的一个子类,它继承了eat方法。在SongBird中,构造方法被重写,但是新的构造方法没有hungry属性。理论上SongBird的构造方法必须调用其超类Bird的构造方法来对其初始化。有两种方法:调用超类构造方法的未绑定版本,使用super函数。
相关文章推荐
- python 学习笔记-构造方法
- Python学习笔记九:列表(1)--列表元素介绍及创建方法
- php学习笔记 面向对象的构造与析构方法
- python学习笔记——Thread常用方法
- Think Python 学习笔记1:编程方法
- python学习笔记之七:魔法方法,属性
- Python学习笔记三(Try-cacth&with方法)
- Object-C 学习笔记(五)---构造方法
- JavaScript学习笔记(三十二) 经典继承模式二-借用构造方法
- Java学习笔记--继承中的构造方法
- php学习笔记 面向对象的构造与析构方法
- 学习笔记之C#类的构造方法
- Java学习笔记——构造方法
- Python学习笔记五(面向对象-类-方法-属性)
- php学习笔记------[面向对象的构造与析构方法]
- python学习笔记(3)列表的常见方法
- python学习笔记——Thread常用方法
- PackageManagerService学习笔记四-构造方法(扫描Package)