class test(object):
def __init__(self, a = 0):
test.a = a
t = test()
print test.a ## obviously we get 0
''' ====== Question ====== '''
print test.somethingelse ## I want if attributes not exist, return None. How to do that?
ответ
Прежде всего, вы добавляете переменную в класс test.a = a
. Вы должны добавить его в экземпляр, self.a = a
. Потому что, когда вы добавляете значение в класс, все экземпляры будут обмениваться данными.
Вы можете использовать __getattr__
функцию как этот
class test(object):
def __init__(self, a = 0):
self.a = a
def __getattr__(self, item):
return None
t = test()
print t.a
print t.somethingelse
Цитирования из __getattr__
документов,
Вызывается, когда поиск атрибута не найден атрибут в обычных местах (т.е. а не атрибут экземпляра, и он не найден в дереве классов для себя). name - это имя атрибута.
Примечание: Преимущество __getattr__
над __getattribute__
является то, что __getattribute__
будет называться всегда, мы должны обрабатывать вручную, даже если текущий объект имеет атрибут. Но, __getattr__
будет вызывать , но не, если атрибут найден в иерархии.
Вы ищете крючок __getattribute__
. Нечто подобное должно делать то, что вы хотите:
class test(object):
def __init__(self, a = 0):
self.a = a
def __getattribute__(self, attr):
try:
return object.__getattribute__(self, attr)
except AttributeError:
return None
Вы имеете в виду '__getattr__'? –
@FelixKling Нет. См. Раздел руководства, к которому я привязан. (Я понимаю, что обе работают, но '__getattribute__' является предпочтительным для нового кода.) – zwol
' __getattribute__' может быть неэффективным, так как элемент управления достигает его всегда, даже если поиск элемента находится в иерархии. – thefourtheye
- 1. Возврат функции, если существует элемент
- 2. Возврат 404, если не существует страницы # PHP
- 3. Возврат узла, если отношения нет
- 4. Возврат строки, если значение не существует
- 5. Возврат данных, если данных не существует
- 6. Возврат min (DATE), если Дата не существует
- 7. Возврат, если нет ошибки Golang
- 8. Добавить атрибут, если он еще не существует
- 9. Вычислить атрибут, если он не существует
- 10. Если атрибут существует, измените css
- 11. xslt test, если существует атрибут
- 12. Дисплей нет изображения, если не существует codeigniter
- 13. обновление: нет ошибки, если запись не существует
- 14. jQuery find id атрибут существует или нет
- 15. JPA @ManyToOne нет mappedBy атрибут существует
- 16. SQL - если существует возврат всегда 1
- 17. XSLT - атрибут проверки существует или нет
- 18. Если файл существует возврат либо еще нотные
- 19. метеор если документ существует возврат true/false
- 20. symfony существует возврат false, даже если файл существует?
- 21. Alter Тип: добавить атрибут, если он еще не существует
- 22. Добавить атрибут элемента HTML, если существует $ scope.myVar
- 23. XMLStarlet: выберите атрибут, если ребенок существует
- 24. JQuery - проверить, если атрибут XML существует
- 25. .NET lambda XML OrderBy атрибут, если атрибут существует
- 26. Oracle SQL: возврат записи, даже если определенное значение не существует
- 27. Возврат NULL столбцы, если идентификаторы не существует в таблице
- 28. Возврат custom имеет одно отношение, если не существует
- 29. PHP std :: Проверка класса, если существует атрибут
- 30. Шаблон шеф-повара, если существует атрибут
http://docs.python.org/2/reference/datamodel.html#object.__getattr__, хотя мне интересно, почему вы хотите это сделать. Какова фактическая проблема, которую вы пытаетесь решить? –