如何在python中使用内部类?

pprl5pva  于 2021-08-25  发布在  Java
关注(0)|答案(3)|浏览(411)
class Tesla_car:
    def __init__(self,yourname):
        self.name = yourname
        print("Hey'%s',I am a bot and I will tell you about....." %self.name)
        self.cells = self.batteries()

    def material(self,model_no):
        self.model = model_no
        print("your car",self.model," made from aluminium")
    def color(self,color):
        self.color = color
        print("the color of your car is:'%s'" %self.color)

        class batteries:
            def __init__(self):
                pass
            def materials(self):
                self.battery_name = "Tesla tabless 4680 cells"
                self.chemicals = "Tesla uses Lithium-Nickle-cobalt-magnesium(NMC) mixed in 8:1:1 ratio"
    EV_car = Tesla_car('Blah')
    EV_car()

大家好,我正在尝试使用嵌套类,但每当我试图通过编写 self.cells = self.batteries() 它引发了一个错误:“tesla_car”对象没有“电池”属性。如何修复它

y53ybaqx

y53ybaqx1#

似乎您正在尝试组合对象,但方式不对。
实际上,您的类反映了实现组合的完美irl场景:汽车配备(组合)一组不同的对象,包括电池。
在使用合成时,通常需要定义 TeslaCarBatteries 作为单独的类,然后分配 Batteries 对其中一个 TeslaCar 示例变量。例如。:

class Batteries:
    def __init__(self):
        ...

class TeslaCar:
    def __init__(self):
        self.batteries = Batteries()
        ...

上面的代码只是如何实现组合的一个简单框架,但是您可以很容易地将其适应您的情况。
最后,供参考,避免嵌套类。它是非Python的,当您深入研究简单的oop模式(如组合和继承)时,您会发现它毫无用处。

ht4b089n

ht4b089n2#

改变

self.batteries()

Tesla_car.batteries()
dfddblmv

dfddblmv3#

你的 batteries 内部类的缩进错误。
目前它在 color 方法,而不是与方法处于同一级别。

class TeslaCar:

    def color(...):
        ...
        class Batteries:
           ...

相反,要:

class TeslaCar:

    def color(...):
       ...

    class Batteries:
       ...

相关问题