有没有一种方法在Python中避开类构造函数__init__
?
例:
class A(object):
def __init__(self):
print "FAILURE"
def Print(self):
print "YEHAA"
现在我想创建一个 A
的实例。它可能看起来像这样,但是这种语法是不正确的。
a = A
a.Print()
编辑:
一个更加复杂的例子:
假设我有一个叫做C
的对象,它的目的是存储一个单一的参数并对其进行一些计算。然而,这个参数不是直接传递的,而是嵌入在一个巨大的参数文件中。它可能看起来像这样:
class C(object):
def __init__(self, ParameterFile):
self._Parameter = self._ExtractParamterFile(ParameterFile)
def _ExtractParamterFile(self, ParameterFile):
#does some complex magic to extract the right parameter
return the_extracted_parameter
现在,我想要转储并加载那个名为C
的对象的实例。但是,当我加载此对象时,我只有单个变量self._Parameter
,而且我无法调用构造函数,因为它需要参数文件。
@staticmethod
def Load(file):
f = open(file, "rb")
oldObject = pickle.load(f)
f.close()
#somehow create newObject without calling __init__
newObject._Parameter = oldObject._Parameter
return newObject
换句话说,如果没有传递文件参数,则无法创建实例。然而,在我的“真实”案例中,它不是一个参数文件,而是一些巨大的数据垃圾,我肯定不想在内存中携带它甚至将其存储到磁盘中。由于我想从方法
Load
返回一个C
类的实例,因此我必须以某种方式调用构造函数。旧编辑:
一个更复杂的例子,解释了我问这个问题的原因:
class B(object):
def __init__(self, name, data):
self._Name = name
#do something with data, but do NOT save data in a variable
@staticmethod
def Load(self, file, newName):
f = open(file, "rb")
s = pickle.load(f)
f.close()
newS = B(???)
newS._Name = newName
return newS
正如你所看到的,由于data
没有存储在类变量中,我无法将其传递给__init__
。当然,我可以简单地存储它,但如果数据是一个巨大的对象,我不想一直把它保存在内存中或甚至保存到磁盘上怎么办?
__init__
不需要任何数据。