У меня есть базовый класс с некоторыми переменными и объектами, которые хранятся как:
class Human():
arms = Arms()
legs = Legs()
head = Head()
, и я тоже хочу динамически добавлять функции в этот класс.Например, что-то вроде:
class Swim():
def moveArms(self):
self.arms related stuff
def breathe(self):
self.head related stuff
, а затем я хочу передать этот класс Swim человеку в этом примере, чтобы такая функция, как learnSwim
, могла просто передавать функции в класс Human
или любой другой произвольныйкласс вроде Dog
и т. д., если у них есть Arms
и Head
.
Но если у меня есть такой класс, он не совместим с моим начальным классом, как показано ниже:
class Fly():
def flapWings:
do stuff with self.wings()
и я пытаюсь передать этот класс на Human
, я хотел бы, чтобы он был несовместим в оценке.Как learnFly(human_instance)
должен потерпеть неудачу, потому что Human
не имеет крыльев.Она не должна передавать функцию flapWings
, а Human
понимает, что это не сработает только при вызове функции.
Думаю, я мог бы сделать:
def learnSwim(instance):
if instance.arms is not None and instance.head is not None:
instance.moveArms = Swim.moveArms
instance.breathe = Swim.breathe
else:
raise Exception("No arms or head! I guess I'll just drown")
def learnFly(instance):
if instance.wings is not None:
instance.flapWings = Fly.flapWings
else:
raise Exception("Have no wings but you never know!")
, поэтому мой вопрос в том,Есть ли более нативный / питонский / простой / обычный способ достижения этого?