【发布时间】:2019-12-22 02:19:11
【问题描述】:
这是我快速实现的单例对象(与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'**
我应该检查什么?
【问题讨论】:
-
这些都没有任何意义。有太多的错误和太多的上下文缺失,我们无法判断其中的任何一个应该是什么样子。
-
没有
Model.Model类,我不知道为什么Model.__Model存在,你有两个__setattr__s 并且都坏了,我不知道你为什么甚至试图在没有意义的情况下执行self.model.__getattribute__('bool_custom_trained'),您的一些方法会出于某种奇怪的原因尝试访问self.instance,而这一切都没有触及所有缺失的上下文。您的代码严重混乱。 -
一些没有意义的东西是从你正在阅读的资源中继承而来的,这也是没有意义的。它太老了,看起来有人试图在不了解它们的情况下更新它以获得新的语言功能。不过,即使在更新之前,它也不是很好。
-
我只是尝试快速实现单例,因为我只需要一个对象,并且需要从多个地方调用同一个对象。我想把它用作一种全局存储。由于我仍然不擅长 python 语法,我用谷歌搜索了单例 python,并根据我提供的链接,我采用了该实现并使用额外的属性 bool_custom_trained 对其进行了修改。
-
@intersect 整个程序的目的是什么?这似乎已经演变成XY problem 的情况。
标签: python getattribute