Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 11, 2016 23:09:59

Unnamed001
Зарегистрирован: 2015-01-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование в классе не находит переменную

Здравствуйте, что я неправильно делаю и как это можно исправить?
Почему второй класс не видит унаследованные переменные из первого класса?

class className1(object):
    def __init__(self):
        self.param1 = 'param1'
        self.cl_className2 = className2()
class className2(className1):
    def __init__(self):
        print self.param1
className1()

<<< Traceback (most recent call last):
<<<   File "<string>", line 8, in <module>
<<<   File "<string>", line 4, in __init__
<<<   File "<string>", line 7, in __init__
<<< AttributeError: 'className2' object has no attribute 'param1'

Отредактировано Unnamed001 (Янв. 11, 2016 23:10:18)

Офлайн

#2 Янв. 11, 2016 23:11:13

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Наследование в классе не находит переменную

Или super или явный вызов __init__ родителя…

Отредактировано 4kpt_IV (Янв. 11, 2016 23:11:42)

Офлайн

#3 Янв. 23, 2016 15:01:34

Unnamed001
Зарегистрирован: 2015-01-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование в классе не находит переменную

Можете пожалуйста на моем примере показать, как нужно прописать super в __init__ в className2, так чтобы self у наследовался полностью с className1?

Отредактировано Unnamed001 (Янв. 23, 2016 15:01:55)

Офлайн

#4 Янв. 23, 2016 15:41:47

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Наследование в классе не находит переменную

class className1(object):
    def __init__(self):
        self.param1 = 'param1'
class className2(className1):
    def __init__(self):
        super(className2, self).__init__()
        print self.param1
className2()

Офлайн

#5 Янв. 24, 2016 00:03:51

Unnamed001
Зарегистрирован: 2015-01-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование в классе не находит переменную

Подскажите пожалуйста, а если вот такой вызов, как быть с super'ом?

class className1(object):
    def __init__(self):
        self.param1 = 'YES'
        self.className2 = className2()
class className2(className1):
    def __init__(self):
        print self.param1
className1()
<<< AttributeError: 'className2' object has no attribute 'param1'

Офлайн

#6 Янв. 24, 2016 01:37:30

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

Наследование в классе не находит переменную

Unnamed001
а вам не кажется логическим противоречием наличие в объекте А объекта Б который основывается на объекте А?



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

Офлайн

#7 Янв. 24, 2016 11:46:10

Unnamed001
Зарегистрирован: 2015-01-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование в классе не находит переменную

JOHN_16
Unnamed001а вам не кажется логическим противоречием наличие в объекте А объекта Б который основывается на объекте А?

Нет, потому что таких объектов как Б будет много (В,Г,Д,..), а объект А основной который вызывает их, как модуль.

Офлайн

#8 Янв. 24, 2016 11:56:55

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Наследование в классе не находит переменную

Unnamed001
Нет, потому что таких объектов как Б будет много (В,Г,Д,..), а объект А основной который вызывает их, как модуль.

1. Разберитесь в чем разница между классом и его экземплярами (объектами).
2. Разберитесь, зачем нужен метод __init__.
3. Разберитесь в чем разница между атрибутами класса и атрибутами объекта и как они записываются.

P.S. Все, что Вы тут городите - ересь. Опишите задачу в терминах предметной области и форумчане попробуют Вам помочь…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version