内部类内的外部方法

2024-06-01 10:00:37 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有三个等级:汽车(外部)、发动机(内部)和制动器(另一个内部)。我永远不会在我还没有使用汽车的任何情况下使用发动机或制动器

另外,汽车的工作也很繁重(比如读取一个大的CSV文件)。我只想在代码中调用它一次,然后使用引擎和制动器处理这些数据

最后,有一个函数我知道我将在引擎或刹车中使用,所以我想我应该在汽车中创建它,然后从汽车中生成引擎和刹车子类

我的代码:

class Car:
    def __init__(self,foo,bar):
        self.foo = foo
        self.bar = bar
        
    def some_method(self):
        print('im outer but used inner')
        
    class Engine():
        def __init__(self):
            self.some_method()
    
    class Brake():
        def __init__(self):
            self.some_method()

如果我跑步:

test = Car('a','b')

test.Engine()

我得到:

AttributeError: 'Engine' object has no attribute 'some_method'

我的错误在哪里


Tags: 代码引擎selffooinitdefbarsome
1条回答
网友
1楼 · 发布于 2024-06-01 10:00:37

首先,汽车不是发动机,但汽车有发动机,所以需要进行“合成”,即在发动机类中创建汽车的对象(刹车类也是如此),示例代码:

class Car:
      def __init__(self,foo,bar):
          self.foo = foo
          self.bar = bar
        
      def some_method(self):
           print('im outer but used inner')
class Engine:
      def __init__(self):
           self.car=Car() #here i created an object of car inside of Engine class
      def get_method(self):
             self.car.some_method()

组合的定义:组合是一个概念,它模拟了一种关系。它允许通过组合其他类型的对象来创建复杂类型。这意味着类组合可以包含另一个类组件的对象。这种关系意味着组合有一个组件。 -&燃气轮机;资料来源:https://realpython.com/inheritance-composition-python/#:~:text=Composition%20is%20a%20concept%20that,a%20Composite%20has%20a%20Component%20

现实生活中的例子:在现实生活中,复杂对象通常是由更小、更简单的对象构建的。例如,汽车是用金属框架、发动机、一些轮胎、变速器、方向盘和大量其他零件制造的。个人电脑是由CPU、主板、内存等组成的。甚至你也是由更小的部分组成的:你有头、身体、腿、手臂等等

相关问题 更多 >