Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 3, 2014 10:13:15

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Наследование переменных и списков Python

Добрый день, возникли вопросы по тому как в 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)

Офлайн

#2 Фев. 3, 2014 11:54:57

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Наследование переменных и списков Python

#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()

Офлайн

#3 Фев. 3, 2014 12:45:47

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Наследование переменных и списков Python

MetalHead
У вас в Auto переменные класса (не экземпляра), а в Cabriolet наоброт. dimy44 вас исправил сделав все элементы элементами экземпляра класса, только он видимо не заметил что нужно не append, а extend так как вы хотите расширить существующий список, а не добавить в него еще 1 элемент-список со свойствами.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Фев. 3, 2014 22:27:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Наследование переменных и списков Python

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 не нужно наследоваться (там это происходит автоматически)



Отредактировано py.user.next (Фев. 3, 2014 22:33:37)

Офлайн

#5 Фев. 4, 2014 08:57:41

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Наследование переменных и списков Python

Благодарю, вопросов больше нет.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version