Interfaces in Python

B

BlackPanter

Guest
Hi,

gibt es eine Möglichkeit in Python Interfaces wie in Java zu verwenden?

Grüße
Sören
 
Hm, ob das vom Konzept her überhaupt passt (Python -> dynamisch, "It is Easier to Ask for Forgiveness than Permission" Prinzip + multiple Vererbung, Duck Typing wäre auch ein Stichwort ;) )

in dem Zusammenhang:
http://dirtsimple.org/2004/12/python-is-not-java.html
http://dirtsimple.org/2004/12/python-interfaces-are-not-java.html

Zum Thema:
Man könnte z.B sowas nutzen:
http://dynlang-hhu.github.com/l8_interface.html
Es gibt auch entsprechende Decoratoren, wenn man die ABC-Metaclasse nutzt:
http://docs.python.org/library/abc.html
Wie gesagt, Python ist vom Konzept anders, deshalb sollte man nicht versuchen, Javapraktiken zu übertragen ;)
 
Ja, das habe ich auch schon festgestellt. ich werd mir die links mal anschauen.

Ich bin jetzt auf ein neues Problem gestoßen. Hat zwar jetzt nix mit Interfaces zu tun, aber wegen jedem kleinen Problem will ich jetzt kein neuen Thread aufmachen.

Ich habe ne get- und ne set-Methode mit mehreren Parameter.
Jetzt möchte ich sie zu nem Property machen.
Wie schaff ich es, das ich dem Property die Parameter übergeben kann?
Vorallem beim get stellt mich das vor nem Rätsel.
Bsp.:
Code:
class Test(object):
    def __init__(self):
        self.__dic = {par1: None, par2: None}
    def get(self, par):
        return self.__dic.get(par)
    def set(self, par1, par2):
        self.__dic(par1) = par1
        self.__dic(par2) = par2
    prop = property(get, set)

test = Test()
Die Aufrufe:

set:
Code:
test.prop = "hello", world
-> Fehlermeldung:
Traceback (most recent call last):
File "D:\pyWorkspace\Brettspiele\src\test.py", line 19, in <module>
test.prop = "Hello", " World!"
TypeError: set() takes exactly 3 positional arguments (2 given)

get (wenn self.__dic für par1 und par 2 werte hat):
Code:
print(test.prop("par1")
-> Fehlermeldung:
Traceback (most recent call last):
File "D:\pyWorkspace\Brettspiele\src\test.py", line 20, in <module>
print(test.prop("par1"))
AttributeError: 'tuple' object has no attribute 'prop'

Wie bekomm ich die beiden Fehlermeldungen weg?

Grüße
Sören
 
Also der Code so wie er da steht ruft bei mir mehrere Fehler hervor.

Ich weiß nicht genau ob ich richtig verstanden habe was du machen willst, aber ne Möglichkeit wär es einfach ne def für das Property noch zu schreiben.. also so ungefähr:

Code:
class Test(object):
    def __init__(self):
        self.dic = {"par1": None, "par2": None}
    def get(self, par):
        return self.dic.get(par)
    def set(self, par1, par2):
        self.dic["par1"] = par1
        self.dic["par2"] = par2
    def prop(self,par,par1,par2):
        return property(self.get(par),self.set(par1, par2))


test = Test()
test.set("test", "bla")
print test.get("bla")
print test.prop ("bla","test","hupe")
wie gesagt ich weiß nicht ob es wirklich das ist was du wolltest. Wenn nicht, dann wär es vielleicht ganz interessant mehr Infos zu geben. Z.b. wozu das eingesetzt werden soll oder sowas.
 
Ich will das Scrabble Spiel, welches wir im 2. Semester gebaut haben in Python übersetzen.

Konkret möchte ich die Properties grad benutzen um Attribute und Inhalt der einzelnen felder abzufragen.

also wenn ich z.b. für Feld x=1, y=3 einen Buchstaben bzw. nen Attribut zuweisen will, dann möcht ich net über 2 methoden das machen sondern eher so:
Code:
set: piece = 1, 3, "A"
get: print(piece(1,3))

So in der Art möchte ich das ganze benutzen...
Der versteckten get- und set-Methode weiter Parameter übergeben ohne die get und die set Methode explizit benutzten zu müssen...
 
Zurück
Oben