Seite 1 von 1

str-Klasse erweitern

Verfasst: Freitag 24. Oktober 2008, 17:30
von theliquidwave
Hallo.
Ich möchte gerne die str-Klasse etwas auchbauen, funktionieren tut es prima.

Code: Alles auswählen

>>> class str(str):
	def isfloat(self):
		return (self.count(".") == 1 and self.replace(".", "").isdigit())

	
>>> a = str("2.0")
>>> a.isfloat()
True
>>> b = "2.0"
>>> b.isfloat()

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    b.isfloat()
AttributeError: 'str' object has no attribute 'isfloat'
Ich wollte fragen, ob es auch möglich ist, die Variante mit der Variable "b" zu realisieren?

Gruß,
Chris

Re: str-Klasse erweitern

Verfasst: Freitag 24. Oktober 2008, 17:35
von numerix
Abgesehen von der zweifelhaften Sinnhaftigkeit deines Experiments funktioniert die Methode nicht mit negativen floats.

Verfasst: Freitag 24. Oktober 2008, 17:53
von str1442
Vor kurzem habe ich dieses Topic hier beim Suchen zufällig gefunden:

http://www.python-forum.de/topic-2456.h ... int+klasse

Hilt dir sicherlich weiter.

Verfasst: Freitag 24. Oktober 2008, 19:58
von BlackJack
@Chrisber: Die einfachste Art wirklich alle Fälle eines gültigen `float` zu finden ist folgende:

Code: Alles auswählen

def can_be_float(x):
    try:
        dummy = float(x)
        return True
    except ValueError:
        return False
Ist zudem noch polymorph.

Verfasst: Freitag 24. Oktober 2008, 20:37
von snafu
Warum nicht?

Code: Alles auswählen

if type(x) == float:
    return True
else:
    return False

Verfasst: Freitag 24. Oktober 2008, 20:50
von str1442
Weil er Strings überprüfen will.

Verfasst: Freitag 24. Oktober 2008, 20:55
von snafu
Tatsache. Ich nehm's zurück. ^^

Verfasst: Freitag 24. Oktober 2008, 23:44
von theliquidwave
Hi.
Mir geht es nicht um die Funktion selber, sondern eher darum im generellen die Stringklasse zu erweitern. Ist es denn irgendwie möglich es auch zu schaffen ohne das str() zu benutzen?

~ Chris

Verfasst: Freitag 24. Oktober 2008, 23:52
von Leonidas
Nein, Python unterstützt nicht das erweitern von Basisdatentypen wie str, du musst deine eigenen Objekte definieren. Vor Jahren gab es mal einen Hack der das ermöglicht hat, aber die Python-Entwickler haben da einen Riegel vorgeschoben.

Offene Klassen sind generell ein Thema bei dem Ruby-Leute und Python-Leute keine Einigkeit erzielen können.

Verfasst: Freitag 24. Oktober 2008, 23:52
von str1442
Steht doch in dem Thread:
Das liegt wohl daran, daß ints schon beim parsen erzeugt werden. Du könntest noch den Pythonsource ändern und Python selber compilieren, aber ob das so sinnvoll ist?
+ Rest

Verfasst: Samstag 25. Oktober 2008, 00:26
von theliquidwave
Ok, schade, vielen Dank trotzdem =)

~ Chris

Verfasst: Samstag 25. Oktober 2008, 16:30
von birkenfeld
snafu hat geschrieben:Warum nicht?

Code: Alles auswählen

if type(x) == float:
    return True
else:
    return False
Bitte gewöhne dir an, Singletons mit `is` und nicht mit `==` zu vergleichen. Abgesehen davon ist es für Typüberprüfungen, sofern sie überhaupt sein müssen, allgemein sinnvoller, `isinstance` zu verwenden.