Pau*_*nta 15 python setattr python-3.x
我写了以下包装类.我想定义__setattr__
它将所有属性重定向到包装类.但是,这阻止我初始化包装类.有什么优雅的方法可以解决这个
class Wrapper:
def __init__(self, value):
# How to use the default '__setattr__' inside '__init__'?
self.value = value
def __setattr__(self, name, value):
setattr(self.value, name, value)
Run Code Online (Sandbox Code Playgroud)
qua*_*tum 16
您正在捕获所有分配,这会阻止构造函数分配self.value
.您可以使用它self.__dict__
来访问实例字典.尝试:
class Wrapper:
def __init__(self, value):
self.__dict__['value'] = value
def __setattr__(self, name, value):
setattr(self.value, name, value)
Run Code Online (Sandbox Code Playgroud)
另一种使用方式object.__setattr__
:
class Wrapper(object):
def __init__(self, value):
object.__setattr__(self, 'value', value)
def __setattr__(self, name, value):
setattr(self.value, name, value)
Run Code Online (Sandbox Code Playgroud)
禁用的一种方式__setattr__
,直到初始化后,在不改变self.value = value
在语法__init__
方法覆盖这里.简而言之,在对象中嵌入初始化知识并在__setattr__
方法中使用它.对于你Wrapper
:
class Wrapper:
__initialized = False
def __init__(self, value):
self.value = value
self.__initialized = True
def __setattr__(self, name, value):
if self.__initialized:
# your __setattr__ implementation here
else:
object.__setattr__(self, name, value)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3577 次 |
最近记录: |