Я хотел бы наследовать все __init__
экземпляра класса. Например, если у вас есть объектив класса и объектив «L50mm». Я хотел бы, что моя камера с «L50mm» наследует все __init__
линзы, как это:Как наследовать _init_ из экземпляра класса?
class Lens:
def __init__(self,focallength,aperture):
self.focallength=focallength
self.aperture=aperture
L50mm=Lens(50,2.2)
class Camera:
def __init__(self,name,sensor,lens='None'):
self.name=name
self.sensor=sensor
if lens!='None':#if I have a lens mounted I want that all the __init__ is inherited e.g.:
super(Lens).__init__()#something like this I KNOW it doesn't work
else:#if I don't have a lens just keep 'None'
self.lens=lens
mycamera=Camera('DSCF828','CCD',L50mm)
>>TypeError: must be type, not classobj
Конечно, я знаю, что я могу поставить self.lens=lens
в методе камеры __init__
но мне было интересно, если есть более прямой способ наследования всех свойств.
Основная цель состоит в том, чтобы получить доступ непосредственно все методы:
mycamera.focallength
mycamera.aperture
вместо:
mycamera.lens.aperture
mycamera.lens.focallength
Вместо self.lens = Lens()
как предложено в комментариях не имеет никакого смысла для меня обусловленно я бы должны снова передать все параметры, поэтому, пожалуйста, внимательно прочитайте вопрос.
вы не используете с помощью 'super' правильный путь.' super' используется для вызова метода суперкласса. Может быть, здесь вы просто хотите создать новый экземпляр объектива, если он «Нет»? В этом случае вы просто хотите заменить «super (Lens) .__ init __()» на 'self.lens = Lens()' – loutre
Что вы d что камера имеет не только объектив, но и камеру ** - объектив **, теперь это не имеет никакого смысла. –
@AnttiHaapala, когда я рассматриваю свой объект в целом, это всего лишь exaple .... –