我正在尝试编写一个确定一个人是否成年的课程。如果一个人是成年人,那么他们将年满18岁。并且程序应返回True。但是,在执行此程序时,我总是得到False的返回值。如果有人对我做错了什么有任何想法,将不胜感激。
class Person:
def __init__(self, name, adult=False, age=0):
self.name = name
self.age = age
self.adult = adult
if self.age >= 18:
self.adult = True
else:
self.adult = False
def birthday(self):
self.age += 1
p = Person("Dan", 17)
p.adult
p.birthday()
p.adult
据我了解,生日函数在调用时应将年龄增加1,但我不认为这样做,我不确定原因。
分步更正:
__init__
特殊方法仅在类实例化阶段一次被调用。这就是为什么您的实现中的self.adult
仅被分配一次的原因条件:
if self.age >= 18:
self.adult = True
else:
self.adult = False
只是self.adult = self.age >= 18
的嘈杂/详细版本>
将adult=False
传递到构造函数中没有意义,因为adult
age
value] >>adult
属性最好定义为计算属性,并通过@property
装饰器进行访问-这将使其表现得像动态属性优化设计:
class Person:
def __init__(self, name, age=0):
self.name = name
self.age = age
self._adult = False
@property
def adult(self):
return self.age >= 18
def birthday(self):
self.age += 1
p = Person("Dan", 17)
print(p.adult) # False
p.birthday()
print(p.adult) # True