我有一个基类,如下所示:
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)