在许多 class 属性上使用 属性
Using property on many class attributes
我有两个 class 具有许多属性,除了一个之外的所有属性都应该具有相似的 属性 功能。我更愿意避免为所有属性手动编写这些属性,因为这会很乏味,并且会迫使我对添加到 class 的每个属性进行跟进。另外,我需要做不止一个 class。
生成my_container中的对象后我会用到这个。
下面是我要解决的案例的简化示例。
def my_class:
@property
def a1(self):
return self.my_container._a1
...
@property
def a10(self):
return self.my_container._a10
对于遵循特定模式的一系列属性,我会使用 __getattr__
挂钩:
def __getattr__(self, name):
# translate a\d names into _a\d
if name.startswith('a') and name[1:].isdigit():
return getattr(self, '_' + name)
这假设直接设置这些属性并不容易(因此添加a0
而不是_a0
),例如当您还有相应的 __setattr__
来处理设置这些相同属性时的门控或转换。
我有两个 class 具有许多属性,除了一个之外的所有属性都应该具有相似的 属性 功能。我更愿意避免为所有属性手动编写这些属性,因为这会很乏味,并且会迫使我对添加到 class 的每个属性进行跟进。另外,我需要做不止一个 class。
生成my_container中的对象后我会用到这个。 下面是我要解决的案例的简化示例。
def my_class:
@property
def a1(self):
return self.my_container._a1
...
@property
def a10(self):
return self.my_container._a10
对于遵循特定模式的一系列属性,我会使用 __getattr__
挂钩:
def __getattr__(self, name):
# translate a\d names into _a\d
if name.startswith('a') and name[1:].isdigit():
return getattr(self, '_' + name)
这假设直接设置这些属性并不容易(因此添加a0
而不是_a0
),例如当您还有相应的 __setattr__
来处理设置这些相同属性时的门控或转换。