如何从另一个对象的方法访问对象的属性,这是Python中的一个属性?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何从另一个对象的方法访问对象的属性,这是Python中的一个属性?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2045字,纯文字阅读大概需要3分钟。
内容图文
![如何从另一个对象的方法访问对象的属性,这是Python中的一个属性?](/upload/InfoBanner/zyjiaocheng/768/bfcc8dbd652d4b6db07960bdc96a957a.jpg)
我想知道是否可能,如果是的话,如何在实现组合时访问“超级”类实例的属性.
下面提供的示例仅用于提供想法,并在进一步说明中设置共同点.
我希望直接从对象“门”(类型为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()
预期:
>打印两次“123”
我尝试过的:
>在创建对象期间传递必需属性
我知道我可以通过传递“car_id”来定义init方法,但出于某些原因,我希望尽可能避免使用它.如果没有,我会适当地去做.
>设置class属性,然后在classmethod中从CarElement类中调用它,例如:
@classmethod
def get_id(cls):
return Car.id
但是这个解决方案的问题是,我可以为Car class(MiniVan,Truck等)提供许多子类,我希望它仍然有效.
>尝试使用描述符
def __get__(self, instance, owner):
return instance.id
但我可以理解它是错误的,实际上getter(据我所知,干净的代码)应该返回一个类的实例,而不是任何属性.
附加信息
>我将始终使用CarElement(或子类)实例作为Car(或子类)实例的实例属性 – 不同的用法将被视为use-error
>可以有很多不同的Car类子类,但总是在继承方式(Car< - RacingCar(Car)< - FormulaOneCar(RacingCar))但没有组成
解决方法:
为了使代码正常工作,您必须使用car_id初始化所有CarElement-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
我看不到任何其他神奇的方式.
内容总结
以上是互联网集市为您收集整理的如何从另一个对象的方法访问对象的属性,这是Python中的一个属性?全部内容,希望文章能够帮你解决如何从另一个对象的方法访问对象的属性,这是Python中的一个属性?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。