我想知道这是否可能,如果有可能,在实现组合时,如何访问“super”类实例的属性。
下面提供的例子只是为了在这里提供想法,并为进一步的解释建立共同的基础。在
我想直接从对象“door”(类型DoorElement)访问MiniVan实例的“id”属性。在
我的代码
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()
应输入:
我的尝试:
我知道我可以通过传递“car_id”来定义init方法,但出于某些原因,我希望尽可能避免它。如果不是的话,我很乐意去做。在
但这个解决方案的问题是,我可以有许多汽车类的子类(微型货车、卡车等),我希望它仍然有效。在
def __get__(self, instance, owner):
return instance.id
但我可能理解错误,实际上getter(就我所理解的干净代码而言)应该返回类的实例,而不是任何属性。在
其他信息
为了让代码正常工作,您必须用
car_id
初始化所有CarElement
-s。目前,您得到的错误是由于方法的作用域中缺少这样一个变量。我的想法是:我看不出其他什么神奇的方法了。在
相关问题 更多 >
编程相关推荐