2017-08-24 43 views
0

我有一个类动物,我想它有一个属性,允许访问一组特定的功能。如何实现包含方法的python类属性?

class Animal(object): 
    def __init__(self, age): 
     self.age = age 

rex = Animal() 
rex.actions.bark() 
rex.actions.say_age() 

我试图创建一个动作类,并用它作为多重继承一个mixin,但只是让我做这件事:

rex.say_age() 

这不是我想要的。

我也尝试过创建一个完整的静态方法并使用它们的Actions类,但这迫使我将Animal的属性传递给方法。

我知道熊猫实现这个(Series.str就是一个例子),但它看起来像它需要大量的专有开销

的有一个Python的方式做到这一点?

+0

您正在寻找*构成*无遗传。 –

回答

3

只需创建另一个需要构造函数中的Animal的类。

class AnimalActions(object): 
    def __init__(self, animal): 
    self.animal = animal 

class Animal(object): 
    def __init__(self, age): 
    self.age = age 
    self.actions = AnimalActions(self) 
+0

有没有问题有一个类包含第二类的实例包含第一类的实例?它似乎创建了一个无限嵌套的属性 – Alon

+1

只要你没有任何'__del __()'(析构函数)方法,就没有问题。这是一个引用循环,但只要没有析构函数方法,Python GC就可以处理它。如果循环中的任何对象有任何析构函数,它将以'gc.garbage'结尾(https://docs.python.org/3.6/library/gc.html#gc.garbage) –

+0

而且它不是“包含“,它只是”参考“。对于每个“Animal”对象,只会有一个“AnimalAction”。把它看作彼此的指针,而不是成员/包含的数据。 –

相关问题