Seite 2 von 2

Verfasst: Samstag 18. April 2009, 16:13
von str1442
Barrabas: Nenn es lieber Instanzmethode, eine Klassenmethode ist was anderes (help(classmethod)). Und amount ist ein Attribut des Objektes, nicht der Klasse.

Verfasst: Samstag 18. April 2009, 16:41
von Barabbas
*lol* danke für den Hinweis - ich stolpere gerne noch über bestimmte Begrifflichkeiten und bitte um Nachsicht.

Verfasst: Samstag 18. April 2009, 20:34
von Darii
Ich würde es wohl so implementieren(grob orientiert an jscience)
money.py

Code: Alles auswählen

from money import Money, Currency    

EUR = Currency("EUR")
USD = Currency("USD")

# Hier leider Setter notwendig, da properties auf Klassen in python nicht-trivial sind
Currency.set_reference_currency(EUR)
USD.exchange_rate = 0.765872712

print Money(5, USD).convert_to(EUR)
print Money(10, EUR) + Money(5, USD)

Verfasst: Samstag 18. April 2009, 21:00
von Trundle
@Darii: Was meinst du genau mit "nicht-trivial"?

Verfasst: Samstag 18. April 2009, 21:17
von Darii
Siehe Antwort 1: http://stackoverflow.com/questions/1285 ... assmethods , das war mir jedenfalls zuviel Stress für zwei Funktionen. Ich habs auch nur geschrieben, damit nicht irgendwer wegen dem Setter rummeckert...;)

Verfasst: Dienstag 21. April 2009, 17:31
von sprudel
So, jetzt hab ich das ganze ins Kassensystem eingebaut, funktioniert auch soweit.

JEtzt habe ich nur das Problem: Bei der Eingabe von Geldsummen in verschiedenen Methoden habe ich das Problem dass ich gleich alles wieder durch die Klasse Money jage, so wird die Einheit quasi wieder vergessen.
Habt ihr da eine Idee wie ich überprüfen kann, ob der Eingabewert der Klasse entspricht?

LG Chris

Verfasst: Dienstag 21. April 2009, 18:39
von fred.reichbier
Hm, mal zu den Properties. Interessehalber, was spricht gegen das hier?

Code: Alles auswählen

class Meta(type):
    def _set_foo(cls, foo):
        print '_set_foo fuer', cls
        cls._foo = foo

    def _get_foo(cls):
        print '_get_foo'
        return cls._foo

    foo = property(_get_foo, _set_foo)

class A(object):
    __metaclass__ = Meta

class B(A):
    pass

A.foo = 123
print A.foo
print B.foo
B.foo = 456
print A.foo
print B.foo
gibt mir

Code: Alles auswählen

_set_foo fuer <class '__main__.A'>
_get_foo
123
_get_foo
123
_set_foo fuer <class '__main__.B'>
_get_foo
123
_get_foo
456