繁体   English   中英

已解决:以类方法访问子类中的父类属性

[英]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.

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