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

str-Klasse erweitern

Beitragvon theliquidwave » Freitag 24. Oktober 2008, 17:30

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

Re: str-Klasse erweitern

Beitragvon numerix » Freitag 24. Oktober 2008, 17:35

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

Beitragvon str1442 » Freitag 24. Oktober 2008, 17:53

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

Beitragvon BlackJack » Freitag 24. Oktober 2008, 19:58

@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: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Freitag 24. Oktober 2008, 20:37

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

Beitragvon str1442 » Freitag 24. Oktober 2008, 20:50

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

Beitragvon snafu » Freitag 24. Oktober 2008, 20:55

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

Beitragvon theliquidwave » Freitag 24. Oktober 2008, 23:44

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 24. Oktober 2008, 23:52

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 Modvoice
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Freitag 24. Oktober 2008, 23:52

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

Beitragvon theliquidwave » Samstag 25. Oktober 2008, 00:26

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

Beitragvon birkenfeld » Samstag 25. Oktober 2008, 16:30

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/

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder