因此,我最近开始学习python,现在我被困在应该实现UML图的任务上。
看起来像这样:



它基本上是模特,成人,儿童和退休人士。现在,我遇到的问题是,任务是一个参数“ alter”(eng。= age)定义应该初始化哪个类。未满18岁(小于18岁)的人为亲戚(英语=儿童)。 18至61岁之间的人是Erwachsener(成人),而上面的一切都是退休人员(eng。=退休人)。

现在我的问题是我不知道如何实现这种区分...

这是我到目前为止的内容:

class Person:
    def __init__(self, name, male, alter):
        self.name = name
        self.male = male
        self.__alter = alter

    def print_beschreibung(self):
        if self.male:
            print("Ich heiße " + self.name + ", bin männlich,", self.__alter, "Jahre alt")
        else:
            print("Ich heiße " + self.name +  ", bin weiblich,", self.__alter, "Jahre alt")

    def get_alter(self):
        return self.__alter

    def set_alter(self, neues_alter):
        self.__alter = neues_alter

class Erwachsener(Person):
    def __init__(self, name, male, alter, lohn, ist_verheiratet, kinder):
        super().__init__(name, male, alter)
        self.__lohn = lohn
        self.ist_verheiratet = ist_verheiratet
        self.kinder = kinder


peter = Person("Peter Lustig", True, 52)
peter.print_beschreibung()

最佳答案

有不同的方法来实现此行为。最简单的是拥有一个与您当前的_Person类相同的类Person

class _Person:
    def __init__(self, name, male, alter):
        self.name = name
        self.male = male
        self.__alter = alter

    def print_beschreibung(self):
        if self.male:
            print("Ich heiße " + self.name + ", bin männlich,", self.__alter, "Jahre alt")
        else:
            print("Ich heiße " + self.name + ", bin weiblich,", self.__alter, "Jahre alt")

    def get_alter(self):
        return self.__alter

    def set_alter(self, neues_alter):
        self.__alter = neues_alter


class Kind(_Person):
    pass


class Erwachsener(_Person):
    def __init__(self, name, male, alter, lohn, ist_verheiratet, kinder):
        super().__init__(name, male, alter)
        self.__lohn = lohn
        self.ist_verheiratet = ist_verheiratet
        self.kinder = kinder


class Pensionierter(_Person):
    pass


然后,您有一个功能Person,其行为类似于类,并返回相应的ErwachsenerKindPensionierter类:

def Person(*args, **kwargs):
    alter = args[2]
    if alter < 18:
        return Kind(*args, **kwargs)
    elif 18 <= alter <= 61:
        return Erwachsener(*args, **kwargs)
    else:
        return Pensionierter(*args, **kwargs)


然后,您可以像下面这样使用此功能:

peter = Person("Peter Lustig", True, 52, 0, False, 0)
print(isinstance(peter, Erwachsener))
peter.print_beschreibung()


如果您想Person成为一堂课,那么您将不得不做一些魔术:

class Person:
    def __new__(cls, *args, **kwargs):
        alter = args[2]
        if alter < 18:
            cls = Kind
        elif alter < 61:
            cls = Erwachsener
        else:
            cls = Pensionierter
        return object.__new__(cls)
     # The rest of the class


然后,您可以按上述方式使用它:

peter = Person("Peter Lustig", True, 52,0,False,0)
print(isinstance(peter, Erwachsener)) # prints True
peter.print_beschreibung()


但是您也可以这样:

print(isinstance(peter, Person)) # prints True

09-08 11:21