type() liefert <type 'instancemethod'>

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.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

type() liefert <type 'instancemethod'>

Beitragvon droptix » Dienstag 1. Mai 2007, 19:02

Ich erstelle einen SimpleXMLRPCServer und möchte alle Methoden registrieren, die mit "rp_" (remote procedure) beginnen. Auszug:

Code: Alles auswählen

def start_server(self):
   # Create server.
   self.server = SimpleXMLRPCServer.SimpleXMLRPCServer((self.host, self.port))
   # Register all methods starting with "rp_".
   for attr in dir(self):
      if attr.startswith("rp_"):
         func = getattr(self, attr)
         if type(func) == types.FunctionType:
            self.server.register_function(func)
         print type(func), types.FunctionType, types.InstanceType
   # Start server.
   #self.server.serve_forever()


Liefert:

Code: Alles auswählen

<type 'instancemethod'> <type 'function'> <type 'instance'>


Wie kann ich denn rauskriegen, ob das Attribut `getattr(self, "rp_foo")` wirklich eine Methode der Klasse ist und keine Variable? Im Modul `types` finde ich dafür keinen sinnvollen Vergleichswert... weder `types.FunctionType` noch `types.InstanceType` liefert True.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 1. Mai 2007, 19:07

types.MethodType
TUFKAB – the user formerly known as blackbird
BlackJack

Beitragvon BlackJack » Dienstag 1. Mai 2007, 19:41

Ich weiss nicht ob es besonders "pythonisch" ist, so genau zu sein. Reicht es nicht mit `callable()` zu prüfen ob man das Objekt aufrufen kann?
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 » Mittwoch 2. Mai 2007, 10:11

+1 für BlackJacks Lösung.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider], Bing [Bot], jan.b