Найти - Пользователи
Полная версия: непонятка с наследованием
Начало » Python для новичков » непонятка с наследованием
1
d0dger
Имеется некий базовый класс:
 class MyClass:
    var_one = 'class '
    var_two = ['class']
    var_three = ['', '']
    def __init__(self):
        pass

И два дополнительных класса, наследуемых от базового:
 class OneClass(MyClass):
    def __init__(self):
        self.var_one += ' One'
        self.var_two.append('One')
        self.var_three[0] = 'One'
 class TwoClass(MyClass):
    def __init__(self):
        self.var_one += ' Two'
        self.var_two.append('Two')
        self.var_three[1] = 'Two'

Создаются два объекта класса:
 classOne = OneClass()
 classTwo = TwoClass()

И вот тут возникает вопрос, почему атрибут строкового типа var_one ведет себя предсказуемо, а атрибуты типа списка var_two и var_three принимают непонятные (для меня) значения:
 print(classOne.var_one) > class One
 print(classOne.var_two) > ['class', 'One', 'Two']
 print(classOne.var_three) > ['One', 'Two']

Откуда в объекте classOne появляются значения из класса TwoClass?
py.user.next
Переменные надо создавать внутри метода __init__(), а не внутри класса за пределами методов. Тогда у каждого экземпляра эти переменные будут создаваться заново.
Rodegast
> а атрибуты типа списка var_two и var_three принимают непонятные (для меня) значения

Они существуют в пространстве имён класса. По этому они будут общими для всех его экземпляров.
P.S. Изменяемыми типами нужно пользоваться с осторожностью, часто их случайное изменение влечёт сложнообнаруживаемые ошибки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB