gpt4 book ai didi

python属性和继承

转载 作者:IT老高 更新时间:2023-10-28 20:23:03 27 4
gpt4 key购买 nike

我有一个带有属性的基类(get 方法),我想在子类中覆盖该属性。我的第一个想法是:

class Foo(object):
def _get_age(self):
return 11

age = property(_get_age)


class Bar(Foo):
def _get_age(self):
return 44

这不起作用(子类 bar.age 返回 11)。我找到了一个有效的 lambda 表达式解决方案:

age = property(lambda self: self._get_age())

那么这是使用属性并在子类中覆盖它们的正确解决方案,还是有其他首选方法来做到这一点?

最佳答案

我只是更喜欢重复 property() 以及在重写类方法时重复 @classmethod 装饰器。

虽然这看起来很冗长,但至少对于 Python 标准而言,您可能会注意到:

1) 对于只读属性,property 可以用作装饰器:

class Foo(object):
@property
def age(self):
return 11

class Bar(Foo):
@property
def age(self):
return 44

2) 在 Python 2.6 中,properties grew a pair of methods setterdeleter 可用于将已用于只读属性的快捷方式应用于常规属性:

class C(object):
@property
def x(self):
return self._x

@x.setter
def x(self, value):
self._x = value

关于python属性和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/237432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com