因此,我最近开始学习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
,其行为类似于类,并返回相应的Erwachsener
,Kind
或Pensionierter
类: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