[英]accessing child class attributes from parent static methods in pydantic models
[英]Solved : Accessing Parent Class Attributes in Child Class as classmethod
我有以下代码可以正常工作:
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()
但是,我希望将最后一个方法 - 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 的属性。 但是,通过继承,它还应该查看父级,它应该在哪里找到属性。
我在这里想念什么?
如果方法被标记为@classmethod
,它只能访问类而不是类的实例。 这意味着您无权访问实例变量。 它与继承无关,您甚至无法在该方法中访问gradyear
属性。 这意味着__init__()
中设置的任何变量都不能被@classmethod
访问。 您可以在此处阅读有关@classmethod
的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.