增加年龄并确定成人是否有课程和方法

问题描述 投票:-1回答:1

我正在尝试编写一个确定一个人是否成年的课程。如果一个人是成年人,那么他们将年满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,但我不认为这样做,我不确定原因。

python-3.x class class-method
1个回答
0
投票

分步更正:

  • __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
© www.soinside.com 2019 - 2024. All rights reserved.