Переменные, которые вы определяете вне __init__
, совершенно не сопоставимы с теми, которые вы объявляете внутри __init__
. Первые принадлежат Class
, вторые принадлежат Object
.
Таким образом, если вы хотите, чтобы a
, b
, c
и d
изменялись с каждым экземпляр Hello()
, вы не должны объявлять их вне области __init__()
. Они просто не имеют того же значения.
Однако, если это то, что вы хотите сделать, вот как это сделать:
class Hello:
a = 4
b = 4
c = 4
def __init__(self):
d = 4
for attr in dir(self):
if not callable(attr) and not attr.startwith('__'):
self.__dict__.setdefault(attr, Hello.__dict__.get(attr))
Затем с помощью H = Hello()
вы будете иметь, например, H.a = Hello.a
. В более общем смысле, у вас будет копия каждой переменной из Class
для каждого Instance
вашего Class
.
Вы этого хотите?