如何使用mixin类为python中的多个类提供方法

如何使用mixin类为python中的多个类提供方法,python,Python,我试图理解如何在python中使用mixin。我想让Bird、Dog和Bat类拥有来自PetMixIn类的eat方法,但也可以是自实例。我该怎么做 class Pet(object): def __init__(self, food): self.food = food def eat(self): print(f'Eatting...{self.food}') class PetMixIn(object): def eat(self):

我试图理解如何在python中使用mixin。我想让Bird、Dog和Bat类拥有来自
PetMixIn
类的
eat
方法,但也可以是自实例。我该怎么做

class Pet(object):
    def __init__(self, food):
        self.food = food
    def eat(self):
        print(f'Eatting...{self.food}')

class PetMixIn(object):
    def eat(self):
        print('Eatting...')

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

class Bird(Animal):
    def __init__(self, life, flyable):
        super.__init__(lift)
        self.flyable = flyable
    #bird attribution ...

class Dog(Animal):
    def __init__(self, life, name):
        super.__init__(lift)
        self.name = name
    #dog attribution ...

class Bat(Animal):
    def __init__(self, life, size):
        super.__init__(lift)
        self.size = size
    #bat attribution ...
bat = Bat(40, '1')
dog = Dog(10, 'tom')
bird = Bird(3, True)
这里是一个小例子(python3)


可能是你的复制品,甚至没有使用mixin。你试过从中继承吗?这个案例不需要混合。将
eat
方法移动到
Animal
。如果我需要使用PetMixIn中的某些属性,该怎么办?喜欢self.xxx?不太明白。您想在mixin中使用init吗?
PetMixIn
类的方法是
defeat(self):
。在方法签名中有:
self
。您在mixin上定义的任何方法都可以使用
self
任何
Animal
方法,即使没有继承连接。Python毕竟是一种动态语言。
class PetMixIn:
    xxx = 2
    def eat(self):
        print('Eatting...')

class Animal:
    def __init__(self, life):
        self.liferange = life

class Bat(Animal, PetMixIn):
    def __init__(self, life, size):
        super().__init__(life)
        self.size = size
    #bat attribution ...

bat = Bat(40, '1')
bat.eat()
print(bat.xxx)