我有一个模拟python代码,我想将其转换为类结构以方便使用。
现在,我的问题是:我知道如何设置一个普通的类,即:
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”
答案 0 :(得分:0)
您是从Simulation
继承而没有覆盖__init__
构造函数。由于您没有覆盖,因此它使用__init__
中的Simulation
,该参数接受1个参数。
请注意,Geometry
不能从Simulation
继承,因为它是其中的一部分。如果您愿意,可以将类Geometry
从Simulation
中移出。但是,如果您希望能够调用Simulation.Geometry...
(通过继承无法做到),就可能不希望这样做。
如果您希望能够调用Simulation
中Geometry
的属性,可以说Simulation.attribute
来引用它,但是您不能访问这样的实例变量。