Python: Erstellen einer Klasseninstanz ohne Aufruf des Initialisierers

Gibt es eine Möglichkeit, zu vermeiden, fordern __init__ auf eine Klasse während der Initialisierung ist es, wie aus einer Methode der Klasse?

Ich versuche ein Gehäuse zu konstruieren und Satzzeichen, Kleinschreibung string-Klasse in Python zur effizienten Vergleich Zwecke, aber ich habe Probleme bei der Erstellung einer neuen Instanz ohne Aufruf __init__.

>>> class String:

    def __init__(self, string):
        self.__string = tuple(string.split())
        self.__simple = tuple(self.__simple())

    def __simple(self):
        letter = lambda s: ''.join(filter(lambda s: 'a' <= s <= 'z', s))
        return filter(bool, map(letter, map(str.lower, self.__string)))

    def __eq__(self, other):
        assert isinstance(other, String)
        return self.__simple == other.__simple

    def __getitem__(self, key):
        assert isinstance(key, slice)
        string = String()
        string.__string = self.__string[key]
        string.__simple = self.__simple[key]
        return string

    def __iter__(self):
        return iter(self.__string)

>>> String('Hello, world!')[1:]
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    String('Hello, world!')[1:]
  File "<pyshell#1>", line 17, in __getitem__
    string = String()
TypeError: __init__() takes exactly 2 positional arguments (1 given)
>>> 

Was sollte ich ersetzen string = String(); string.__string = self.__string[key]; string.__simple = self.__simple[key] mit initialisiert das neue Objekt mit den Scheiben?

EDIT:

Als inspiriert durch die Antwort unten geschrieben, die Initialisierung der bearbeitet wurde, um schnell zu überprüfen, für die keine Argumente.

def __init__(self, string=None):
    if string is None:
        self.__string = self.__simple = ()
    else:
        self.__string = tuple(string.split())
        self.__simple = tuple(self.__simple())

InformationsquelleAutor der Frage Noctis Skytower | 2010-01-30

Schreibe einen Kommentar