Python接口与自实例化

2024-09-27 22:39:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于简单策略设计模式的更具设计性质的问题

假设我有一个接口:

class RenewInterface:
    def __init__(*args, **kwargs):
        self.var1 = {}
        self.var2 = []
        if args:
            for i in args:
                inst = i()
                self.var1[inst.__class__.__name__] = inst

    @abstractmethod
    def renew(*args, **kwargs)
        Do some stuff and call renew in self.var1[inst__class__.__name__]

class ChildClass(RenewInterface):
    def __init__(*args, **kwargs):
        super(ChildClass, self).__init__(*args, **kwargs)

    def renew(self, *args, **kwargs)
        Do more stuff

当我从那个类继承时,如果我选择调用超类__init__(上面的代码)。如果我没有参数,那么我只将var1var2公开给子类,但是如果我出于某种原因有参数,并且我用super(ChildClass, self).__init__(*args, **kwargs)调用了父类(renewanterface),并且由于某种原因参数是ChildClass的类,那么我想我应该从自身实例化ChildClass?因为我不关心超类中的变量,所以可以:

  1. 跳过调用超类
  2. 跳过ChildClass?中的__init__,然后再次使用RenewanInterface __init__进行实例化

我都试过了,都很管用,但我不知道最“Python”的方法是什么?或者更重要的是,它是否与版本2.6、2.7和python不同>=3.3.

我已经阅读了这些文件,并试图谷歌,但我没有找到任何结论性的信息:(

敬礼


Tags: nameinself参数initdefargskwargs
1条回答
网友
1楼 · 发布于 2024-09-27 22:39:52

如果我错了,请纠正我

你想知道的似乎是处理方法重载的最python方法,特别是init方法来解决你的问题

选项包括: 1.重载方法,但不要调用“超类”方法 2.不要使方法过载。保留要调用的超类方法

这不是一个“pythonic”问题,而是与OO有关。 基类方法提供了一个默认实现。如果不希望使用默认实现,请重写该方法。据我所知,您对子类的默认实现不满意。覆盖它

相关问题 更多 >

    热门问题