子类如何从其父类继承一个类方法,该类方法从 python 中的子类获取类变量?

问题描述 投票:0回答:3

我这里有一段代码,我在其中定义了一个带有类方法和类变量的父类:

class Parent:
    var1 = 'foo'
    var2 = 'bar'
    
    def getVar1Var2AsString(self):
        return f'{Parent.getVar1()}_{Parent.getVar2()}'

    @classmethod
    def getVar1(cls):
        return cls.var1

    @classmethod
    def getVar2(cls):
        return cls.var2

然后,我有一个定义子类的代码:

class Child(Parent):
    var1 = 'banana'
    var2 = 'apple'

然后我跑:

child = Child()
output = child.getVar1Var2AsString()
print(output)

我预计输出会返回

banana_apple
,但它返回
foo_bar

我怎样才能得到我期望的结果?我是 OOP 的新手。

python oop inheritance class-method class-variables
3个回答
3
投票

getVar1Var2AsString
中,当您调用
Parent.getVar1()
时,您可以在不引用当前对象或其类的情况下执行此操作。它always查找
Parent
上的方法。如果要查找当前对象类中的方法,请使用
self.getVar1()
。你也根本不需要 getter 方法,你可以只使用
self.var1
self.var2
.


0
投票

继承没问题,错误的是变量访问。在

getVar1Var2AsString
中,当您写
Parent
时,它总是指代
Parent
(当然),而不是
self
的类,它可以用
type(self)
得到。或者,如果您想查找实例上的类变量,只需使用
self
.

顺便说一句,我不认为吸气剂在这里添加任何东西。

所以:

def getVar1Var2AsString(self):
    return f'{type(self).var1}_{type(self).var2}'

0
投票

如果您想获得

foo_bar
,如果对象是
Parent
类的实例,
banana_apple
,如果它是
Child
类的实例,您可以通过将
getVar1Var2AsString
更改为

@classmethod
def getVar1Var2AsString(cls):
    return f"{cls.getVar1()}_{cls.getVar2()}"

这样,相应类的值用于生成输出。

© www.soinside.com 2019 - 2024. All rights reserved.