我想知道,如果有可能,如果是,如何访问一个“超级”类的实例,其组成实现时的属性(一个或多个)。
下面提供的例子只是提供关于进一步的解释这里的想法和设置共同点。
我想有直接对象“门”获得“id”属性为小型货车的一个实例(类型DoorElement)。
我的代码
class Car:
def __init__(self, _id):
self.id = _id
class CarElement:
def __init__(self, name):
self.name = name
def get_car_id(self):
# Body which will access value of attribute "id"
return car_id
class MiniVan(Car):
def __init__(self, _id):
super(MiniVan, self).__init__(_id)
self.door = DoorElement('door')
self.engine = EngineElement('engine')
class DoorElement(CarElement):
def __init__(self, name):
super(DoorElement, self).__init__(name)
class EngineElement(CarElement):
def __init__(self, name):
super(EngineElement, self).__init__(name)
def main():
mini_van = MiniVan(123)
id_from_door = mini_van.door.get_car_id()
id_from_engine = mini_van.engine.get_car_id()
print(id_from_door) # Expected output 123
print(id_from_engine) # Expected output 123
if __name__ == '__main__':
main()
预期:
我已经试过:
我知道,我可以只定义了init方法与传递“car_id”但由于某些原因,我喜欢尽可能地避免它。如果没有,我会propably只是去了。
@classmethod
def get_id(cls):
return Car.id
但是,这种解决方案的问题是,我可以有很多儿童类汽车类(小型货车,卡车等),我想有它仍在工作。
def __get__(self, instance, owner):
return instance.id
但我能理解错了,实际上吸气剂(据我了解干净的代码)应该返回一个类,而不是任何属性的实例。
附加信息
为了使您的代码工作,你就必须与CarElement
初始化所有car_id
-S。目前,你所得到的错误来自缺乏的方法的范围这样的变数。我改变的想法是这样的:
class CarElement:
def __init__(self, name, car_id):
self.name = name
self.car_id = car_id
def get_car_id(self):
# Body which will access value of attribute id
return self.car_id
我看不到任何其他魔术的方式。