【发布时间】:2020-07-01 18:28:12
【问题描述】:
我正在寻找一种不重复使用 @property 装饰器的结构相同的 getter/setter 定义的方法。一个例子:
class foo:
def __init__(self,length):
self.length=length
# length
@property
def length(self):
return self._length
@length.setter
def length(self, val):
# do some checks here (e.g. for units, etc.) (same as in the class below)
self._length = val
class bar:
def __init__(self,width):
self.width=width
# width
@property
def width(self):
return self._width
@width.setter
def width(self, val):
# do some checks here (e.g. for units, etc.)(same as in the class above)
self._width = val
类 bar 中的属性宽度和类 foo 中的长度在结构上具有相同的设置器,因此我想定义一个通用设置器,我可以为这些属性应用。 但是,我不确定如何实现所需的行为?也许与二级装饰师?
非常感谢您的帮助:)
【问题讨论】:
-
不幸的是,这样做很乏味,但出于以下几个原因建议这样做:它是明确的,因此阅读您的代码的人可以确切地知道发生了什么;它与继承一起工作,这可能是一件非常棘手的事情。
-
如果你想避免代码重复,最好的方法是在 say foo 中编写一个类方法,然后在 bar 和 foo 中调用它。我的意思只是用于设置器中的检查单元部分。或使其成为全局检查功能。
-
是的,我一开始是用重复的,但是当你想在未来的某个时候改变一些东西时,你就有麻烦了。因此,我想知道是否有标准解决方案。毕竟,我还在学习 Python,并在这些问题出现时寻找解决这些问题的好方法 =)
标签: python python-3.x