Найти - Пользователи
Полная версия: Наследование в классе не находит переменную
Начало » Python для новичков » Наследование в классе не находит переменную
1
Unnamed001
Здравствуйте, что я неправильно делаю и как это можно исправить?
Почему второй класс не видит унаследованные переменные из первого класса?

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'
4kpt_IV
Или super или явный вызов __init__ родителя…
Unnamed001
Можете пожалуйста на моем примере показать, как нужно прописать super в __init__ в className2, так чтобы self у наследовался полностью с className1?
ayb
class className1(object):
    def __init__(self):
        self.param1 = 'param1'
class className2(className1):
    def __init__(self):
        super(className2, self).__init__()
        print self.param1
className2()
Unnamed001
Подскажите пожалуйста, а если вот такой вызов, как быть с 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'
JOHN_16
Unnamed001
а вам не кажется логическим противоречием наличие в объекте А объекта Б который основывается на объекте А?
Unnamed001
JOHN_16
Unnamed001а вам не кажется логическим противоречием наличие в объекте А объекта Б который основывается на объекте А?

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

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

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