Я не уверен, что это можно сделать, но мне нужен объект, в котором вы можете запросить любой атрибут, и он просто возвращает 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
NB. обратите внимание, что это может работать не со всеми атрибутами, есть зарезервированные слова, например. x.class
Не уверен, понял ли я ваш вопрос (не очень хорошо говорит по-английски), но я думаю, вы могли бы попробовать использовать hasattr
(https://docs.python.org/3/library/functions.html#hasattr), чтобы проверить, существует ли атрибут, и вернуть все, что вы хотите, если это не так.
Если вы все еще хотите, чтобы класс возвращал фактические атрибуты, когда они существуют, у вас могут быть __getattribute__
ошибки атрибута catch:
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
Из любопытства, не могли бы вы рассказать нам, почему вы хотите это сделать?