Есть два класса A и B которые наследуют класс Interface.
Подразумевается, что в классах A и B данные, унаследованные из Interfaces будут изолированы.
Это так, но только не относится к переменной b имеющей тип dict - при изменении ее внутри класса A эти изменения видны и в классе B
class Interface:
a = 1
b = dict()
c = []
class A(Interface):
def __init__(self):
self.a = 2
self.b['a'] = 'a'
self.c = [1,2,3]
class B(Interface):
def __init__(self):
print('B(a)=', self.a)
print('WTF ?? B(b)=', self.b)
print('B(c)=', self.c)
a = A()
b = B()
Результат удивительный - изменение A.b повлекло изменение B.b, хотя B.a и B.c не изменились
B(a)= 1
WTF ?? B(b)= {'a': 'a'}
B(c)= []
Если же завернуть b во вложенный класс, то все нормально
class Interface:
a = 1
b = {}
c = []
d = None
class __S__:
b = {}
def __init__(self):
self.d = self.__S__()
class A(Interface):
def __init__(self):
super().__init__()
self.a = 2
self.b['a'] = 'a'
self.c = [1,2,3]
self.d.b = 'a'
class B(Interface):
def __init__(self):
super().__init__()
print('B(a)=', self.a)
print('WTF ?? B(b)=', self.b)
print('B(c)=', self.c)
print('B(d.b)=', self.d.b)
a = A()
b = B()
Результат уже такой как надо - B.d изолирован от A.d
B(a)= 1
WTF ?? B(b)= {'a': 'a'}
B(c)= []
B(d.b)= {}