Есть ли способ обойти конструктор __init__
класса в python?Есть ли способ создать экземпляр класса без вызова __init__?
Пример:
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__
. Конечно, я мог бы просто сохранить его, но что, если данные - огромный объект, который я не хочу постоянно носить в памяти или даже сохранять на диске?
С какой целью вы хотите сделать это? –
Странный вопрос .... что на самом деле пытается? –
У меня есть «незакрашенный» объект, из которого я хочу создать новый объект того же типа.Однако из этого незакрашенного объекта у меня недостаточно данных для подачи на __init__. В C++ я бы перегрузил конструктор и сделал его закрытым, в Python я потерял ^^. Однако текущие параметры в __init__ имеют смысл. Это мое затруднительное положение. – Woltan