1.构造方法:只要把init方法的名字从简单的init修改为__init__即可:def __init__(self):。
2.子类调用超类的构造方法:在自己的构造方法内添加:SuperClass.__init__(self)。在调用一个实例的方法时,该方法的self参数会被自动绑定到实例上。但如果直接调用类的方法(比如上面的那句代码),那么就没有实例会被绑定。这样就可以自由地提供需要的self参数。这样的方法称为未绑定方法。通过将当前的实例作为self参数提供给未绑定方法,子类就能够使用其超类构造方法的所有实现。
3.使用super函数:super函数只能在新式类中起作用。所以需要在超类使用__metaclass__=type这句代码来声明此超类是一个新式类。然后在子类的构造方法中使用super(SonClass,self).__init__()就可以调用超类的构造方法了(SonClass是子类)。
4.property函数:在新式类中应该使用property函数而不是访问器方法(get,set方法)。property函数可以用0,1,2,3或者4个参数来调用。如果没有参数,产生的属性既不可读也不可写。如果只是用一个参数调用(即只有一个取值方法),产生的属性是只读的,第三个参数(可选)是一个用于删除特性的方法。第四个参数是一个文档字符串。property的4个参数分别被叫做fget,fset,fdel和doc。
5.静态方法和类成员方法:静态方法和类成员方法分别在创建时分别被装入staticmethod类型和classmethod类型的对象中。静态方法的定义没有self参数,且能够被类本身直接调用。类方法在定义时需要名为cls的类似于self的参数,类成员方法可以直接用类的具体对象调用。cls参数是自动被绑定到类的。可以使用@staticmethod和@classmethod这样的装饰器在方法上进行修饰,相当于java里的注解。
6.为了在访问特性的时候可以执行代码,必须使用一些魔法方法,如下:__getattribute__(self,name):当特性name被访问时自动被调用(只能在新式类中使用)。__getattr__(self,name):当特性name被访问且对象没有相应的特性时被自动调用。__setattr__(self,name,value):当试图给特性name赋值时会被自动调用。__delattr__(self,name):当试图删除特性name时被自动调用。
7.迭代器:__iter__方法返回一个迭代器,这个迭代器具有next方法(和java里的Iterator一样)。一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象则是迭代器。
8.生成器:任何包含yield语句的函数称为生成器。它的行为和普通的函数有很大的差别。它不是像return那样返回值,而是每次产生多个值。每次产生一个值(使用yield),函数就会被冻结:即函数停在那点等待被激活。函数被激活后就从停止的那点开始执行。
Python子类的参数是另一个子类对象 python在子类中增加参数
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Unity 特性[SerializeReference]搭配CustomEditor实现可生成具体子类并显示子类内容的Inspector面板
先看一下官方对新增特性[SerializeReference]的描述https://docs.unity3d.com/cn/2019.4/ScriptReference/SerializeReference.html简而言之: 默认情况下,不支持多态字段,用 [SerializeReference] 修饰字段可指示 Unity“按引用”而非“按值”序列化字段。借助这个特性可以实现字段的多
多态 SerializeReference U3D Unity3d