Атрибут экземпляров класса очень полезен для сопоставления заданного объекта dict
с экземпляром класса (ключи ключа, которые в процессе обрабатывают атрибуты экземпляра класса).Сопоставление элементов dict по атрибутам класса
Пример:
>>> class SomeClass(object):
... def __init__(self):
... self.numbers = [1, 3, 5, 7, 9]
...
>>> inst = SomeClass()
>>> inst.__dict__
{'numbers': [1, 3, 5, 7, 9]}
>>> inst.__dict__.update({
... 'letters': ['a', 'b', 'c', 'd'],
... 'numbers': [2, 4, 6, 8, 10]
... })
>>> inst.letters, inst.numbers
(['a', 'b', 'c', 'd'], [2, 4, 6, 8, 10])
Однако, это не будет работать, если атрибуты класса объявляются следующим образом:
>>> class SomeClass(object):
... numbers = [1, 3, 5, 7, 9]
...
>>> inst = SomeClass()
>>> inst.__dict__
{}
Есть ли способ, чтобы иметь доступ к ним в этом случае? Я имею в виду, есть ли способ перечислить их независимо от других атрибутов специального класса, таких как методы или атрибуты по умолчанию?
Я понимаю смысл, но в моей конкретной ситуации нет проблем с изменением атрибутов «на лету». Если я это сделаю, это потому, что я считаю (как это ни парадоксально) более простым. – michaelmeyer
На твоей собственной голове! Если вам нужен список всех атрибутов, которые не являются «волшебными», вы можете попробовать отфильтровать все имена с двойным подчеркиванием с помощью 'inspect.getmembers' - что-то вроде этого:' [name, attr for name, attr in inspect.getmembers (MyClass), если не name.startswith ('__'), а не inspect.ismethod (attr)] ' –
* Это * страшно! :) Поэтому, кажется, я ошибаюсь, пытаясь это сделать. Я попытаюсь найти другой путь. Спасибо за совет ! – michaelmeyer