繁体   English   中英

Python 编程与 Class 定义

[英]Python Programming with Class Definition

到目前为止,这是我的代码,到目前为止我遇到的错误是 (name 'person' is not defined) on line person.name = name ,我真的被卡住并试图找出问题/错误是什么我的代码必须基于我在下面写的问题。我不确定我的其余代码是否有任何错误,因为它首先检测到该错误。

from datetime import date

class person:
    pass

def create_person(name, height, birthdate):
    person.name = name
    person.height = height
    get_age = birthdate
    return person

def get_age(person):
    birthdate = person.birth
    today = date.today()
    subyear = 0
    if today.month < birthdate.month or (today.month == birthdate.day and today.day <= birthdate.day):
        subyear = 1
    person.age = (today.year - (birthdate.year + subyear))
    return person.age

def get_description(person):
    return person.name + ' is ' + str(person.height) + ' cm high and is ' + str(get_age(person)) + ' years old'

def main():
    birthdate = date(1976, 8, 14)
    person = create_person('Michael', 190, birthdate)
    print(get_description(person))

这是问题:

为 Person class 编写 class 定义,并使用这些 function 头文件编写用户定义的函数:

 def create_person(name, height, birthdate): # Return aa new person object with the given name, height and birthdate. # - name is a str # - height is an int object in centimetres # - birthdate is a date object from the # module datetime

 def get_age(person): # Return the age of the person in years.

例如,假设今天的日期是 2018 年 6 月 12 日。如果 Mary 出生于 2017 年 6 月 4 日,那么 Mary 的年龄是 1。但是,如果 Bob 出生于 2018 年 6 月 14 日,那么 Bob 还没有过第一个生日所以年龄为0。

 def get_description(person): # Return a string object of the form: Name is # N cm high and is M years old, where N and M # are integers

例如,迈克尔身高 190 厘米,现年 43 岁,或者萨曼莎身高 95 厘米,现年 4 岁。

 def main(): # Create a person named 'Michael', with height # 190 cm, who was born on August 14, 1976 and # output a description of this individual.

如果在编写 function 时使用来自导入模块的 function,则通常在代码顶部声明导入语句。

这是一个只调用主 function 的主程序的示例运行。

 Michael is 190 cm high and is 43 years old.

这是我目前收到的提示:

使用 datetime 模块中的日期 class 来表示日期。 类型为日期的 object 具有可用于计算人员年龄的年、月和日属性。

要计算一个人的当前年龄,您需要首先计算今天的日期。 在 datetime 模块的日期 class 中有一个方法可以创建一个新的日期 object 来表示当前日期。 这种方法的名称是今天。 但是,此方法的特殊参数必须是日期 class 本身,而不是类型为日期的特定 object。 应用于 class object 而不是该 class 的实例的方法称为 ZA2F2ED4F8EBC2CBB4C21A29DC4 方法。

因此,要创建当前日期,您可以使用以下表达式:

 date.today()

因为从 datetime 模块导入日期 class 后,标识符 date 绑定到日期 class object。

要计算年龄,您只需从当前日期的年份属性中减去出生日期的年份属性即可。 但是,您还需要检查此人今年是否已经过生日,如果没有,则减去一年

Person创建自己的属性

class Person:

    def __init__(self, name, height, birthdate):
        self.name = name
        self.height = height
        self.birthdate = birthdate
        
# why someone would write such a function is beyond me, but...
def create_person(name, height, birthdate):
    return Person(name, height, birthdate)

# test
p = create_person('myname', 100, '23-23-23')
print(p.name)

这产生

myname

现在其他函数将拥有一个可以使用的 class 实例。

如果您对其中任何一个功能有疑问,最好将其发布在另一个仅关注该问题的问题中。 (删除不需要演示问题的功能/方法)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM