【发布时间】:2023-02-04 06:07:40
【问题描述】:
我有以下代码可以正常工作:
class Person:
def __init__(self, fname, lname) -> None:
self.firstname = fname
self.lastname = lname
def __repr__(self) -> str:
return f'{self.firstname} {self.lastname}'
class Student(Person):
def __init__(self, fname, lname, year) -> None:
super().__init__(fname, lname)
self.gradyear = year
def __repr__(self) -> str:
return f'{self.firstname} {self.lastname} passed in {self.gradyear}'
def welcome(self):
print(f'Welcome, {self.firstname} {self.lastname} you passed out in {self.gradyear}')
x = Person("John", "Doe")
y = Student("John", "Doe", 1988)
y.welcome()
但是,我希望将最后一个方法 - 欢迎 - 定义为类方法。因此,如果我进行以下更改,代码将失败。
class Person:
def __init__(self, fname, lname) -> None:
self.firstname = fname
self.lastname = lname
def __repr__(self) -> str:
return f'{self.firstname} {self.lastname}'
class Student(Person):
def __init__(self, fname, lname, year) -> None:
super().__init__(fname, lname)
self.gradyear = year
def __repr__(self) -> str:
return f'{self.firstname} {self.lastname} passed in {self.gradyear}'
@classmethod
def welcome(cls):
print(f'Welcome, {cls.firstname} {cls.lastname} you passed out in {cls.gradyear}')
x = Person("John", "Doe")
y = Student("John", "Doe", 1988)
y.welcome()
我收到如下错误:
AttributeError: type object 'Student' has no attribute 'firstname'
我意识到 Python 正在查看子类 - Student 的属性。但是,通过继承,它还应该查看 Parent,它应该在哪里找到属性。
我在这里错过了什么?
【问题讨论】:
标签: python python-3.x class methods