Есть ли способ создать экземпляр класса без вызова __init __?

Есть ли способ обойти конструктор __ init __ из класс в Python?

Пример:

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

Другими словами, невозможно создать экземпляр без передачи файла параметров. В моем «реальном» случае, однако, это не файл параметров, а какой-то огромный мусор данных, который я определенно не хочу носить в памяти или даже хранить на диске.

И поскольку я хочу вернуть экземпляр 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

Как видите, поскольку данные не хранятся в переменной класса, я не могу передать их в __ init __ . Конечно, я мог бы просто сохранить его, но что, если данные представляют собой огромный объект, который я не хочу постоянно носить с собой в памяти или даже сохранять на диск?

57
задан ROMANIA_engineer 6 October 2017 в 09:55
поделиться