property mit 2 Parameter

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
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Hallo,

wie kann ich einer fset property 2 Parameter uebergeben?

Code: Alles auswählen

class test(object):
  def test(self, bla, blub):
    pass

  hm = property(fset=test)

help = test()
help.hm = 1, 2
Traceback (most recent call last):
File "singleton.py", line 32, in ?
help.hm = 1, 2
TypeError: test() takes exactly 3 arguments (2 given)
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

übergibst halt eine Liste

Code: Alles auswählen

>>> class test(object):
...     def test(self, dudu):
...             pass
...     hm=property(fset=test)
...
>>> help = test()
>>> help.hm = [1,2]
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Twilo hat geschrieben:Hallo,

wie kann ich einer fset property 2 Parameter uebergeben?
Garnicht.

Ein Set-Property sorgt dafür das du statt ``foo.bar(1)`` eben ``foo.bar = 1`` schreibst und daher kann nur ein Parameter übergeben werden.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

>>> class MyClass(object):
...  def foo(self, val):
...   self._foo = val
...  foo = property(lambda s: s._foo, foo)
... 
>>> m = MyClass()
>>> m.foo = 1, 2
>>> m.foo
(1, 2)
TUFKAB – the user formerly known as blackbird
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

blackbird hat geschrieben:

Code: Alles auswählen

>>> class MyClass(object):
...  def foo(self, val):
...   self._foo = val
...  foo = property(lambda s: s._foo, foo)
... 
>>> m = MyClass()
>>> m.foo = 1, 2
>>> m.foo
(1, 2)
Da werden keine zwei Parameter übergeben sondern ein ``tuple``, was man auch nicht so kompliziert schreiben muss (=Das lambda macht das ganze Komplizierter. Besser Explizit eine get und set Methode angeben.):

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class MyClass(object):
    def __init__(self):
        self._foo = None
    def set_foo(self, val):
        self._foo = val
    def get_foo(self):
        return self._foo
    foo = property(fset=set_foo, fget=get_foo)
    del set_foo
    del get_foo

m = MyClass()
m.foo = 1, 2, 3, 4 # = (1,2,3,4) = 4er-Tuple != 4 Parameter
print m.foo #-> (1, 2, 3, 4)

Wie gesagt, das was der OP wollte geht nicht, sondern nur über den Umweg eines Containers (tuple, list, ...), was auch **Sinn** macht.
Antworten