类中的Python类

时间:2019-07-18 18:39:54

标签: python class

我有一个模拟python代码,我想将其转换为类结构以方便使用。

enter image description here

现在,我的问题是:我知道如何设置一个普通的类,即:

class simulation:
     def __init__(self, name):
     self.name = name

     def geometry(self):

     def calculation(self):

etc.

...但是如何合并子实例,即圆形,矩形?

基本上,最后,我希望能够编写如下内容:simulation.geometry.circle(...)

这是我到目前为止尝试过的:

class Simulation:
    """Outer Class"""

    def __init__(self, name):
        self.name = name
        ## instantiating the 'Inner' class
        #self.geometry = self.Geometry()

    def print_name(self):
        print("name: ", self.name)

    class Geometry(Simulation):
        """Inner Class"""

        def circle(self, radius,center):
            print("name of simulation: ", self.name)
            print("radius: ", center)
            print("position: ", center)

        def rectangle(self, center):
            print("position: ", center)

现在,如果我尝试:

## instantiating the outer class
sim = Simulation("version_1")
## instantiating the inner class
geo = sim.Geometry()      

geo.circle(radius=10,center=[0,0])

我得到了错误:

line 34, in <module>
    geo = sim.Geometry()

TypeError: __init__() missing 1 required positional argument: 'name'

我该如何解决?基本上,我想使自我惰性。从超类到子类的参数。

编辑:

我试图使Simulation中的几何不活跃...

class Simulation:
    # parent class 

    def __init__(self, name):
        self.name = name
        ## instantiating the 'Inner' class
        #self.geometry = self.Geometry()

    def print_name(self):
        print("name: ", self.name)

class Geometry(Simulation):
    # child class 


    def circle(self, radius,center):
        print("name of simulation: ", self.name)
        print("radius: ", center)
        print("position: ", center)

    def rectangle(self, center):
        print("position: ", center)

...但是我得到了错误:

  

TypeError: init ()缺少1个必需的位置参数:“ name”

1 个答案:

答案 0 :(得分:0)

您是从Simulation继承而没有覆盖__init__构造函数。由于您没有覆盖,因此它使用__init__中的Simulation,该参数接受1个参数。

请注意,Geometry不能从Simulation继承,因为它是其中的一部分。如果您愿意,可以将类GeometrySimulation中移出。但是,如果您希望能够调用Simulation.Geometry...(通过继承无法做到),就可能不希望这样做。

如果您希望能够调用SimulationGeometry的属性,可以说Simulation.attribute来引用它,但是您不能访问这样的实例变量。