如何创建每个属性都是 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
我不确定这是否可以完成,但我想要一个可以查询任何属性的对象,它只是 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