如何创建每个属性都是 None 的 python 对象

how to create a python object where every attribute is None

我不确定这是否可以完成,但我想要一个可以查询任何属性的对象,它只是 returns None,而不是错误。

例如

>>> print(MyObject.whatever)
None
>>> print(MyObject.abc)
None
>>> print(MyObject.thisisarandomphrase)
None

无需在对象的 __init__ 函数中手动分配所有这些值

你可以定义__getattribute__:

class MyObject:
    def __getattribute__(self, name):
        return None  # or simply return
    
x = MyObject()
print(x.abc)
print(x.xyz)

输出:

None
None

注意。请注意,这可能不适用于所有属性,有保留字,例如x.class

不确定我是否理解你的问题(英语不是很好),但我认为你可以尝试使用 hasattr (https://docs.python.org/3/library/functions.html#hasattr) 检查属性是否存在和 return不管你想要什么,如果它不

如果您仍然希望 class 到 return 实际属性存在,您可以 __getattribute__ 捕获属性错误:

class MyObject(object):
    def __getattribute__(self, name):
        try:
            return object.__getattribute__(self, name)
        except AttributeError:
            return None

我想,如果该属性确实存在,那么您会想要它的值,因此我建议:

class MyClass:
    def __init__(self):
        self.a = 1
    def __getattr__(self, name):
        try:
            return super(MyClass, self).__getattr__(name)
        except AttributeError:
            pass
        return None

mc = MyClass()

print(mc.a)
print(mc.b)

输出:

1
None