导入某个模块时,如何覆盖书面功能?

时间:2018-09-19 10:39:41

标签: python python-3.x

我正在编写一个占位符Point and Rectangle函数,但是我想使用Zelle图形模块中的占位符

class Pt:
    def __init__(self,  x, y):
        self.x = x
        self.y = y
        if ('graphics' in sys.modules):
            return graphics.Point(x, y)
class R:
    def __init__(self, tLPoint, w, h):
        self.P1 = tLPoint
        self.P2 = Pt(tLPoint.x + w, tLPoint.y + h)
        self.x = tLPoint.x
        self.y = tLPoint.y
        if ('graphics' in sys.modules):
            return graphics.Rectangle(P1, P2)

到目前为止,这就是我得到的代码,但是当您通过它返回某些内容时,__init__会很烦人。

我想做的是返回Zelle的图形版本(如果存在),而不是自定义版本。

我不确定该怎么做,我们将为您提供帮助。

2 个答案:

答案 0 :(得分:2)

由于类是Python中的对象,因此可以在模块级别将所需的类分配给变量。

if 'graphics' in sys.modules:
    Point = graphics.Point
    Rectangle = graphics.Rectangle
else
    Point = Pt
    Rectangle = R

答案 1 :(得分:0)

如果实例化特定类的实例,则不能使构造函数突然返回完全不同的类的实例。除了不工作之外,这还会令人难以置信。也许像这样适合您:

def create_point(*args, **kwargs):
    if 'graphics' in sys.modules:
        return graphics.Point(*args, **kwargs)
    return Pt(*args, **kwargs)

然后,您仅在需要实例时使用create_point(x, y)