【问题标题】:Python inner classesPython内部类
【发布时间】:2018-01-28 06:56:21
【问题描述】:

我想使用内部类创建一个对象汽车,这个对象汽车具有座位数、颜色、年份、引擎等属性。最后一个属性发动机容量将具有其他属性,如阀门数量、燃料类型、公里数。

所以我先创建类汽车,然后再创建引擎类:

class car:
     def __init__(self, color, year, engine):
        self.color = color
        self.year = year
        self.engine = engine

class engine:
    def __init__(lts, kms_by_lts, fuel_type, valves ):
        self.lts = lts
        self.fuel = fuel
        self.valves = valves
        self.kms_by_lts = kms_by_lts

>> my_car = car('blue','2010','v6')
>>> my_car.engine
'v6'

我想访问另一个类中的一个类,如下所示:

>>> my_car.v6.lts = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: car instance has no attribute 'v6'

可以帮我解决这个问题。

问候

我重新创建对象如下:

class car:
     def __init__(self, color, year, engine):
        self.color = color
        self.year = year
        self.engine = engine()

class engine:
    def __init__(lts, kms_by_lts, fuel_type, valves ):
        self.lts = lts
        self.fuel = fuel
        self.valves = valves
        self.kms_by_lts = kms_by_lts

出现以下错误

>>> my_car = car('blue','2010','v6')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in __init__
TypeError: 'str' object is not callable

【问题讨论】:

  • 属性engine 的值为v6。为什么要使用不同的名称来引用属性?
  • >>> my_car.engine.lts = 4 Traceback(最近一次调用最后一次):文件“”,第 1 行,在 属性错误:'str' 对象没有属性' lts'
  • 这就是你给它的淡水河谷。如果您希望它具有属性“lts”,则需要创建一个引擎对象
  • 但是您将引擎设置为字符串而不是引擎对象
  • self.engine = engine() 在这里对您没有帮助。在您的情况下,正在使用的 engine 实际上是您传递的 string "v6"。阅读我在之前评论中发布的链接。

标签: python


【解决方案1】:

你需要先构造一个引擎,然后是一个car:

my_engine = engine(8.4, 5.5, 'petrol', 20)
my_car = car('blue', '2010', my_engine)

现在您可以访问my_car.engine.lts,例如。

【讨论】:

  • 请注意,要使其正常工作,他们不应使用最新版本的代码,而应使用原始版本。最新版本在做self.engine = engine()
  • @idjaw:很好的说明,事实上我是针对问题中的第一块代码写的,而不是下面的代码块。
  • 感谢 idjaw,它现在可以工作了,再次感谢您的建议。感谢彼得的合作。
猜你喜欢
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2021-01-16
  • 2012-11-15
相关资源
最近更新 更多