gpt4 book ai didi

python - 以更短的方式定义 setter

转载 作者:太空狗 更新时间:2023-10-29 21:26:34 24 4
gpt4 key购买 nike

目前,当我想定义一个 setter 而让 getter 单独存在时,我会这样做:

@property
def my_property(self):
return self._my_property

@my_property.setter
def my_property(self, value):
value.do_some_magic()
self._my_property = value

有什么办法可以让它更短吗?我想跳过这部分,因为它看起来总是一样的:

@property
def my_property(self):
return self._my_property

最佳答案

没有开箱即用的解决方案,但您可以尝试这样的方法:

def defprop(name):
def getter(self):
return getattr(self, name)
return property(getter)

class C(object):
# ...
my_dictionary = defprop('_my_dictionary')
# ...

虽然这并不能为您节省那么多击键次数,但您仍然必须复制属性名称。此外,它不太明确。


更新:经过一番思考,我想到了这个基于描述符的 hackish 技巧(免责声明:这只是为了演示,我并不暗示这是一个好习惯,除非你有一个非常好的理由这样做):

class with_default_getter(object):
def __init__(self, func):
self._attr_name = '_{0.__name__}'.format(func)
self._setter = func

def __get__(self, obj, type):
return getattr(obj, self._attr_name)

def __set__(self, obj, value):
return self._setter(obj, value)

用法:

class C(object):
@with_default_getter
def my_property(self, value):
print 'setting %s'
self._my_property = value

>>> c = C()
>>> c.my_property = 123
setting 123
>>> c.my_property
123

这与@georg 建议的几乎相同,只是将实现展开为描述符。

关于python - 以更短的方式定义 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990395/

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