Seite 1 von 1

type() liefert <type 'instancemethod'>

Verfasst: Dienstag 1. Mai 2007, 19:02
von droptix
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.

Verfasst: Dienstag 1. Mai 2007, 19:07
von mitsuhiko
types.MethodType

Verfasst: Dienstag 1. Mai 2007, 19:41
von BlackJack
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?

Verfasst: Mittwoch 2. Mai 2007, 10:11
von birkenfeld
+1 für BlackJacks Lösung.