Есть ли способ обойти конструктор __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
, мне как-то нужно вызвать конструктор.
СТАРЫЙ РЕДАКТИРОВАТЬ:
Более сложный пример, который объясняет почему Я задаю вопрос:
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__
. Конечно, я мог бы просто сохранить их, но что, если данные - это огромный объект, который я не хочу постоянно носить в памяти или даже сохранять на диск?