在单例对象上调用 __getattribute__ 时对象没有属性错误
Object has no attribute Error when calling __getattribute__ on singleton object
这是我快速实现的单例对象(与 The Singleton template 中的第二个示例非常相似)。
class Model(object):
class __Model:
def __init__(self):
self.val = None
def __str__(self):
return repr(self) + self.val
instance = None
def __new__(cls): # __new__ always a classmethod
if not Model.instance:
Model.instance = Model.Model()
return Model.instance
def __getattr__(self, name):
return getattr(self.instance, name)
def __setattr__(self, name):
return setattr(self.instance, name)
def __getattribute__(self, bool_custom_trained):
return getattr(self.instance, bool_custom_trained)
def __setattr__(self, bool_custom_trained):
return setattr(self.instance, bool_custom_trained)
我在两个脚本中使用该对象。在第一个
print(self.model.__getattribute__('bool_custom_trained'))
打印和设置属性值工作正常,但在第二个我不能使用值,生成的错误是:
**print(self.model.__getattribute__('bool_custom_trained'))
AttributeError: 'Model' object has no attribute 'bool_custom_trained'**
我应该检查什么?
扔掉整本书(python-3-patterns-idioms-test.readthedocs.io,“Python 3 Patterns, Recipes and Idioms”)。
创建实例,因为这不是 Java。
from dataclasses import dataclass
class Model:
def __init__(self):
self.name = ''
self.bool_custom_trained = False
model_instance = Model()
如果你不相信自己不会创造更多的Model
s,你可以del Model
之后。
这是我快速实现的单例对象(与 The Singleton template 中的第二个示例非常相似)。
class Model(object):
class __Model:
def __init__(self):
self.val = None
def __str__(self):
return repr(self) + self.val
instance = None
def __new__(cls): # __new__ always a classmethod
if not Model.instance:
Model.instance = Model.Model()
return Model.instance
def __getattr__(self, name):
return getattr(self.instance, name)
def __setattr__(self, name):
return setattr(self.instance, name)
def __getattribute__(self, bool_custom_trained):
return getattr(self.instance, bool_custom_trained)
def __setattr__(self, bool_custom_trained):
return setattr(self.instance, bool_custom_trained)
我在两个脚本中使用该对象。在第一个
print(self.model.__getattribute__('bool_custom_trained'))
打印和设置属性值工作正常,但在第二个我不能使用值,生成的错误是:
**print(self.model.__getattribute__('bool_custom_trained'))
AttributeError: 'Model' object has no attribute 'bool_custom_trained'**
我应该检查什么?
扔掉整本书(python-3-patterns-idioms-test.readthedocs.io,“Python 3 Patterns, Recipes and Idioms”)。
创建实例,因为这不是 Java。
from dataclasses import dataclass class Model: def __init__(self): self.name = '' self.bool_custom_trained = False model_instance = Model()
如果你不相信自己不会创造更多的
Model
s,你可以del Model
之后。