Давайте предположим, что у меня есть два класса:Наследование переменной от суперкласса
#!/usr/bin/env python
class First():
glob = 'Global data'
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
print (arg1, arg2)
class Second(First):
def __init__(self):
print (self.glob)
И они вызываются из сценария, как:
#!/usr/bin/env python
import classes
data1 = 'First data part'
data2 = 'Second data part'
inst1 = classes.First(data1, data2)
inst2 = classes.Second()
Это работает, OK:
$ ./script.py
('First data part', 'Second data part')
Global data
Я хочу сделать arg1
и arg2
в First
классом что-то глобальное, и использовать его в Second
:
class Second(First):
def __init__(self):
print (self.glob, self.arg1, self.arg2)
Как я могу это достичь?
Вы вводите в заблуждение * данные экземпляра * с данными класса * *. Атрибуты, заданные в '__init__'' First', являются атрибутами каждого экземпляра; экземпляры другого класса (даже подкласса) этого не видят. Какие значения имели бы экземпляры «Second» для этих атрибутов? –
Вам придется называть 'First .__ init__' самостоятельно (поскольку вы переопределяете его в дочернем классе), возможно, с помощью функции' super'. После этого супервызова у вас будет доступ к этим атрибутам. – wim