Вы можете получить доступ к переменным в качестве словаря в «новых классах стиля». Я думаю, что вы должны быть немного осторожны, хотя.
>>> class C(object): # python 2 code, inheriting from 'object' is automatic in 3
a = 5
def __init__(self):
self.j = 90
>>> c = C()
>>> c.__dict__
{'j': 90}
>>> print c.j
90
>>> print c.a
5
обратите внимание, что 'j' появилось в словаре, а 'a' - нет. Похоже, что-то связано с тем, как они инициализируются. Я немного смущен этим поведением и не возражаю против объяснения от гуру: D
Edit:
Если немного больше поиграть, то очевидно, что они решили пойти по вышеописанному поведению (но это все же немного странно
>>> class C(object):
a = 5
def __init__(self):
self.j = 90
self.funct = range # assigning a variable to a function
>>> c = C()
>>> c.__dict__
{'j': 90, 'funct': <built-in function range>}
Я думаю, что он разделяет объект класса (который будет одинаковым для каждого класса) с новыми членами класса (такими, как инициированные внутри init ). Если я сейчас сделаю
>>> c.newvar = 234
>>> c.__dict__
{'j': 90, 'newvar': 234, 'funct': <built-in function range>}
Вы видите, что он строит словарь! Надеюсь, это поможет: D