str-Klasse erweitern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

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
Grüßle.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Abgesehen von der zweifelhaften Sinnhaftigkeit deines Experiments funktioniert die Methode nicht mit negativen floats.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

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.
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.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Warum nicht?

Code: Alles auswählen

if type(x) == float:
    return True
else:
    return False
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Weil er Strings überprüfen will.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Tatsache. Ich nehm's zurück. ^^
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

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
Grüßle.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

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
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Ok, schade, vielen Dank trotzdem =)

~ Chris
Grüßle.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten