Форум сайта python.su
1
Добрый день, возникли вопросы по тому как в 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)
Отредактировано MetalHead (Фев. 3, 2014 10:16:37)
Офлайн
#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()
Офлайн
221
MetalHead
У вас в Auto переменные класса (не экземпляра), а в Cabriolet наоброт. dimy44 вас исправил сделав все элементы элементами экземпляра класса, только он видимо не заметил что нужно не append, а extend так как вы хотите расширить существующий список, а не добавить в него еще 1 элемент-список со свойствами.
Офлайн
857
JOHN_16в Cabriolet у него то же самое
У вас в Auto переменные класса (не экземпляра), а в 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ты сначала разберись в переменных класса и переменных экземпляра
Можно ли напрямую обращаться к переменным наследуемого класса?
dimy44если питон третий, а print показывает, что питон третий, то от object не нужно наследоваться (там это происходит автоматически)class Auto(object):
Отредактировано py.user.next (Фев. 3, 2014 22:33:37)
Офлайн
1
Благодарю, вопросов больше нет.
Офлайн