Python - динамически добавлять новые функции в класс структурированным способом - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть базовый класс с некоторыми переменными и объектами, которые хранятся как:

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!")

, поэтому мой вопрос в том,Есть ли более нативный / питонский / простой / обычный способ достижения этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...