class human(object):
def init(self, name=’‘):
self.name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
class superhuman(human):
@property
def name(self):
return 'super ' + name
s = superhuman('john')
print s.name
# Doesn't work :( "AttributeError: can't set attribute"
s.name = 'jack'
print s.name
我希望能够覆盖该属性,但能够使用超级父级的setter,而不必覆盖子类中的setter。
pythonicaly有可能吗?
仅 使用.getter
原始属性的装饰器:
class superhuman(human):
@human.name.getter
def name(self):
return 'super ' + self._name
请注意,您必须使用全名才能到达父类上的原始属性描述符。
示范:
>>> class superhuman(human):
... @human.name.getter
... def name(self):
... return 'super ' + self._name
...
>>> s = superhuman('john')
>>> print s.name
super john
>>> s.name = 'jack'
>>> print s.name
super jack
在property
描述对象就是 一个
对象,尽管它可以有多个与之相关的方法(吸气,setter和删除器)。现有描述符提供的.getter
,.setter
和.deleter
装饰器函数将property
返回描述符本身的副本,并替换该特定方法。
因此,在human
基类中发生的情况是,首先使用装饰器 创建
了描述符@property
,然后用@name.setter
语法同时具有getter和setter的描述符替换了该描述符。之所以可行,是因为python装饰器用相同的名称替换了原始装饰函数,它基本上会执行name = name.setter(name)
。请参见@property装饰器如何工作?有关所有工作原理的详细信息。
在您的子类中,您只需使用该技巧即可创建描述符的新副本,而只需替换getter。
我在我的项目中使用lombok,并在POJO类上使用和注释生成和。我试图重写属性的setters方法,但它不起作用 我想检查JSON属性是空的还是空的,我想在Setter方法中设置默认值 工作场景: 失败的场景: 输出: 我也将此作为参考,但到目前为止运气不佳
问题内容: 我使用的龙目岛在我的项目和产生和使用,并注解POJO类的顶部。我正在尝试覆盖属性的setter方法,但是它不起作用 我想检查JSON属性是否为空或空,我想在Setter方法中设置默认值 工作方案: 失败的情况: 输出: 问题答案: 您只是遇到了一个我从未见过的错误,或者您正在测试错误。 像这样的注释 在现场一级确实阻止了设置器的生成。但是考虑到要定义一个setter,您甚至不需要它。显
我试图将我的项目升级到一些最新版本,但由于项目中的一些依赖项尚未更新,我无法获得空安全性。 我已经求助于sdk版本2.10,同时我更新了所有核心包,解决了所有突破性的更改。一些不推荐的更改(如FlatButton到TextButton,尚未解决)。 我在构建解决方案时遇到了几个问题,在咨询了一些旧的Stack帖子后,我拼凑了gradle文件更新,升级到Android Studio等... 但是,当
问题内容: 因此,我有一个自定义类,该类具有与int一起使用的功能。然而,在我的程序(库),它越来越被称为周围的其他方法,即,在那里是我的班。有什么办法可以让它使用我的功能吗? 问题答案: 只需将以下内容添加到类定义中,就可以了:
问题内容: 我知道python函数默认是虚拟的。假设我有这个: 我不希望他们能够这样做: 有没有办法防止用户重载roo()? 问题答案: 您可以使用元类: 每当创建子类时,就会调用该元类型的 new 。如果您在场,这将导致错误。仅当没有基类时,它才会接受roo的定义。 您可以通过使用注释来声明哪些方法是最终方法,从而使该方法更加理想。然后,您需要检查所有基准并计算所有最终方法,以查看是否有任何基准
我试图满足几个使用FFMPEG构建视频文件的分层场景。 场景1:将一个视频(指定视频的不透明度)覆盖在一个图像的顶部,作为结果创建一个新的视频。 我用以下方法解决了这个问题: 我正在将视频缩放到3840x2160以匹配我的图像(理想的情况下,我会让它们事先匹配)。 场景2:现在有3层,视频-图像-图像。中间的图像层是带有文字的透明图像。所以我们有一个基础图像,上面覆盖了文本,在一定的不透明度下有一