我有一个基类,我总是想用工厂对象创建对象。
class Shape:
def __init__(self):
pass
class ShapeMgr:
def __init__(self):
self.allShapes = []
def new(self):
newShape = Shape()
self.allShapes.append( newShape )
return newShape
我也从该基类派生了类。
class Circle(Shape):
def __init__(self):
pass
我想从工厂对象初始化派生类对象的基类。 IE,我想通过调用ShapeMgr.new()来创建Circle的Shape部分。
我已尝试按如下方式定义Shape构造函数:
SM = ShapeMgr()
class Circle:
def __init__(self):
global SM
super() = SM.new()
但它告诉我,我无法分配函数调用的结果。如果我改为尝试:
self = SM.new()
然后,当我尝试访问Circle方法时,它表示Shapes没有Circle方法。
有没有办法使用工厂来创建派生类对象的基类部分?
答案 0 :(得分:0)
如果您希望Circle
调用Shape
进行初始化,请执行以下操作:
class Circle(Shape):
def __init__(self): # important!
super().__init__()
如果您的目标是让Circle
最终进入ShapeMgr
,则根本不需要担心基类(Shape
),因为Shape
中没有任何内容1}}使注册变得高兴。
更改ShapeMgr.new()
以接受要注册的可选对象,如果没有给出对象,则创建一个新的Shape
:
def new(self, obj=None):
if obj is None:
obj = Shape()
self.allShapes.append(obj)
请注意,必须在Python中声明self
- 如果没有它,您的方法将无法正常工作。