Найти - Пользователи
Полная версия: Наследование переменных и списков Python
Начало » Python для новичков » Наследование переменных и списков Python
1
MetalHead
Добрый день, возникли вопросы по тому как в Python наследуются переменные и списки, дело в том, что есть класс-родитель Auto, в нем в виде списка перечислены общие свойства. Класс Cabriolet наследует класс Auto. Так вот мне необходимо к имеющемуся словарю класса-родителя добавить новые свойства. Не могу обращаться наппрямую(self не обращается к переменной класса-родителя), получилось обратиться только из метода дочернего класса. Почему так? Можно ли напрямую обращаться к переменным наследуемого класса?
class Auto():
    preferences = ["двигатель", "колеса", "кузов", "руль", "сиденья", "крыша",
                   "объемный багаж"]
    
class Cabriolet(Auto):
    def __init__(self):
        pref = ["скорость", "кожанный салон", "круглые фары"]
        self.preferences.pop(5)
        self.preferences.append(pref)
auto = Auto()
print (auto.preferences)
cabriolet = Cabriolet()
print (cabriolet.preferences)
dimy44
#coding:utf-8
class Auto(object):
    def __init__(self):
        self.preferences = [ "двигатель" , "колеса" , "кузов" , "руль" , "сиденья" , "крыша" , "объемный багаж" ]
class Cabriolet(Auto):
    def __init__ ( self ):
        Auto.__init__(self)
        pref = [ "скорость" , "кожанный салон" , "круглые фары"]
        self.preferences.pop( 5)
        self.preferences.append(pref)
        print(self.preferences)
cabriolet = Cabriolet()
JOHN_16
MetalHead
У вас в Auto переменные класса (не экземпляра), а в Cabriolet наоброт. dimy44 вас исправил сделав все элементы элементами экземпляра класса, только он видимо не заметил что нужно не append, а extend так как вы хотите расширить существующий список, а не добавить в него еще 1 элемент-список со свойствами.
py.user.next
JOHN_16
У вас в Auto переменные класса (не экземпляра), а в Cabriolet наоброт.
в Cabriolet у него то же самое

>>> class Auto:
...     preferences = ["двигатель", "колеса", "кузов", "руль", "сиденья", "крыша",
...                    "объемный багаж"]
... 
>>> class Cabriolet(Auto):
...     def __init__(self):
...         pref = ["скорость", "кожаный салон", "круглые фары"]
...         self.preferences.pop(5)
...         self.preferences.extend(pref)
... 
>>> auto = Auto()
>>> print (auto.preferences)
['двигатель', 'колеса', 'кузов', 'руль', 'сиденья', 'крыша', 'объемный багаж']
>>> cabriolet = Cabriolet()
>>> print (cabriolet.preferences)
['двигатель', 'колеса', 'кузов', 'руль', 'сиденья', 'объемный багаж', 'скорость', 'кожаный салон', 'круглые фары']
>>>
исправил пару ошибок



>>> class Auto:
...     def __init__(self):
...         self.preferences = ["двигатель", "колеса", "кузов",
...                             "руль", "сиденья", "крыша",
...                             "объемный багаж"]
... 
>>> class Cabriolet(Auto):
...     def __init__(self):
...         super().__init__()
...         pref = ["скорость", "кожаный салон", "круглые фары"]
...         self.preferences.pop(5)
...         self.preferences.extend(pref)
... 
>>> auto = Auto()
>>> print (auto.preferences)
['двигатель', 'колеса', 'кузов', 'руль', 'сиденья', 'крыша', 'объемный багаж']
>>> cabriolet = Cabriolet()
>>> print (cabriolet.preferences)
['двигатель', 'колеса', 'кузов', 'руль', 'сиденья', 'объемный багаж', 'скорость', 'кожаный салон', 'круглые фары']
>>>
сделал переменные экземпляра



MetalHead
Можно ли напрямую обращаться к переменным наследуемого класса?
ты сначала разберись в переменных класса и переменных экземпляра
dip3. переменные экземпляра


dimy44
class Auto(object):
если питон третий, а print показывает, что питон третий, то от object не нужно наследоваться (там это происходит автоматически)
MetalHead
Благодарю, вопросов больше нет.
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