python魔术方法怎么用

  介绍

本篇文章为大家展示了python魔术方法怎么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

准备工作

为了确保类是新型类,应该把_metaclass_=类型入到你的模块的最开始。

class  NewType(对象):   mor_code_here   class  OldType:   mor_code_here

在这个两个类中NewType是新类,OldType是属于旧类,如果前面加上_metaclass_=类型,那么两个类都属于新类。

<强>,构造方法

构造方法与其的方法不一样,当一个对象被创建会立即调用构造方法。创建一个python的构造方法很简答,只要把初始化方法,从简单的初始化方法,转换成魔法版本的_init_方法就可以了。

class  FooBar:   ,,,def  __init__(自我):   ,,,,,,,self.somevar=42   ,,,,,,,,,   在祝辞祝辞,f=FooBar ()   在祝辞祝辞f.somevar   42

重写一个一般方法

每一个类都可能拥有一个或多个超类(父类),它们从超类那里继承行为方法。

class 答:   ,,,def 你好(自我):   ,,,,,,,print  & # 39; hello 只小姐:am 强生# 39;   class  B (A):   通过   在祝辞祝辞,一个=,()   在祝辞祝辞,b=, b ()   在祝辞祝辞,你好()   hello 又是小姐:am 。

因为B类没有你好方法,B类继承了一个类,所以会调用一个类的你好方法。

在子类中增加功能功能的最基本的方式就是增加方法。但是也可以重写一些超类的方法来自定义继承的行为。如下:

class 答:   ,,,def 你好(自我):   ,,,,,,,print  & # 39; hello 只小姐:am 强生# 39;   class  B (A):   ,,,def 你好(自我):   ,,,,,,,print  & # 39; hello 只小姐:am , b # 39;   在祝辞祝辞,b=, b ()   在祝辞祝辞,b.hello ()   hello 又是小姐:am , B

特殊的和构造方法

重写是继承机制中的一个重要内容,对一于构造方法尤其重要。看下面的例子:

class 鸟:   ,,,def  __init__(自我):   ,,,,,,,self.hungry=,真的   ,,,def 吃(自我):   ,,,,,,,if  self.hungry:   ,,,,,,,,,,,print  & # 39;啊…& # 39;   ,,,,,,,,,,,self.hungry=False   ,,,,,,,其他的:   ,,,,,,,,,,,print  & # 39;不,,谢谢! & # 39;   在祝辞祝辞,b=,鸟()   在祝辞祝辞,b.eat ()   啊…   在祝辞祝辞,b.eat ()   不,,谢谢!

这个类中定义了鸟有吃的能力,当它吃过一次后再次就会不饿了,通过上面的执行结果可以清晰的看的到。

那么用SongBird类来继承鸟类,并且给它添加歌唱的方法:

class 鸟:   ,,,def  __init__(自我):   ,,,,,,,self.hungry=,真的   ,,,def 吃(自我):   ,,,,,,,if  self.hungry:   ,,,,,,,,,,,print  & # 39;啊…& # 39;   ,,,,,,,,,,,self.hungry=False   ,,,,,,,其他的:   ,,,,,,,,,,,print  & # 39;不,,谢谢! & # 39;   ,,,,,,,,,,,,,   class  SongBird(鸟):   ,,,,,,,,def  __init__(自我):   ,,,,,,,,,,,,,,,,self.sound=, & # 39;诉苦! & # 39;   ,,,,,,,,def 唱(自我):   ,,,,,,,,,,,,,,,,print  self.sound   在祝辞祝辞,s=, SongBird ()   在在在,轮上()   诉苦!   在祝辞祝辞,s.eat ()   Traceback  (most  recent  call 最后一个):   File 才能“& lt; pyshell # 26祝辞,,,line1,拷贝& lt; module>   ,,,s.eat ()   File 才能“C:/Python27/bird", line6,拷贝吃   ,,,if  self.hungry:   AttributeError: & # 39; SongBird # 39;, object  has  no 属性# 39;饿# 39;

异常很清楚地说明了错误:SongBird没有饥饿的特性。原因是这样的:在SongBird中,构造方法被重写,但新的构造方法没有任何关于初始化饥饿的特性的代码。为了达到预期的效果,SongBird的构造方法必须调用其超类鸟的构造方法来确保进行基本的初始化。

两种方法实现:

一、调用未绑定的超类构造方法

class 鸟:   ,,,def  __init__(自我):   ,,,,,,,self.hungry=,真的   ,,,def 吃(自我):   ,,,,,,,if  self.hungry:   ,,,,,,,,,,,print  & # 39;啊…& # 39;   ,,,,,,,,,,,self.hungry=False   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

python魔术方法怎么用