Есть ли способ обойти конструктор __init__
класса в python?
Пример:
class A(object):
def __init__(self):
print "FAILURE"
def Print(self):
print "YEHAA"
Теперь я хотел бы создать экземпляр A
. Это может выглядеть так, однако этот синтаксис неверен.
a = A
a.Print()
EDIT:
Еще более сложный пример:
Предположим, что у меня есть объект 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
Другими словами, невозможно создать экземпляр без передачи файла параметров. Однако в моем "реальном" случае это не файл параметров, а какой-то огромный мусор данных, который я, конечно же, не хочу переносить в памяти или даже хранить на диске.
И так как я хочу вернуть экземпляр C
из метода Load
, мне нужно как-то вызвать конструктор.
OLD EDIT:
Более сложный пример, объясняющий почему. Я задаю вопрос:
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__
. Конечно, я мог бы просто сохранить его, но что, если данные являются огромным объектом, который я не хочу постоянно носить в памяти или даже сохранять на диске?