用python中的基类类方法实例化派生类对象



我有一个基类,如下所示:

class Base(object):
    def __init__(self, arg1, arg2):
        #Declare self
        self.arg1 = arg1
        self.arg2 = arg2
    @classmethod
    def from_ini_file(cls, f):
        # Get arg1 and arg2 from ini file
        return cls(arg1, arg2)

然后我希望能够在派生类中使用classmethod构造函数。天真地,我尝试了:

class Derived(Base):
    def __init__(self):
        f = 'default.ini'
        Base.from_ini_file(f)

但这行不通。我想我理解为什么这不起作用,但如果可能的话,我还没能弄清楚如何正确地做到这一点。

谢谢你的帮助。

编辑

这感觉很不雅,但我目前选择的是:

class Derived(Base):
    def __init__(self):
        t = Base.from_ini_file('default.ini')
        Base.__init__(t.arg1, t.arg2)

这里有很多多余的操作,我不喜欢有基地的争论init函数必须保存到对象中,以便以这种方式使用。所以我一直在寻找更好的解决方案。再次感谢。

from_ini_file返回一个新实例,因此您必须从派生类中调用此方法,并形成一个classmethod:

class Derived(Base):
    @classmethod
    def from_default_ini(cls):
        f = 'default.ini'
        return cls.from_ini_file(f)

我知道这是非常古老的,我相信你已经离开了,但我想分享我是如何实现类似的

class Base(object):
    def __init__(self, arg1, arg2):
        #Declare self
        self.arg1 = arg1
        self.arg2 = arg2
    @staticmethod
    def from_ini_file(f):
        # Get arg1 and arg2 from ini file
        return Base(arg1, arg2)
myInstance = Base.from_ini_file(f)

如果你想完全模糊ini文件:

class Derived(Base):
    def __init__(self, f='default.ini'):
        # Get arg1 and arg2 from ini file
        super().__init__(arg1, arg2)
defaultInstance = Derived()
customInstance = Derived(customF)

最新更新