在单例对象上调用 __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'**

我应该检查什么?

  1. 扔掉整本书(python-3-patterns-idioms-test.readthedocs.io,“Python 3 Patterns, Recipes and Idioms”)。

  2. 创建实例,因为这不是 Java。

    from dataclasses import dataclass
    
    
    class Model:
        def __init__(self):
            self.name = ''
            self.bool_custom_trained = False
    
    
    model_instance = Model()
    
  3. 如果你不相信自己不会创造更多的Models,你可以del Model之后。