hasattr()-Value

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
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Donnerstag 19. März 2009, 14:25

Hallo zusammen

Ich will mich nur vergewissern, ob ich das richtig verstehe. Funktionen sind callable und Strings nicht, richtig? In Python 3.0.1 sagt man dann, Funktionen haben das '__call__'-Attribut, Strings nicht.

In Python 3.0.1:

Code: Alles auswählen

>>>hasattr(getattr(list, 'append'), '__call__')
True
>>>hasattr(getattr(list.append, '__doc__'), '__call__')
False
Was bedeutet es, wenn ein Objekt (Funktion oder String) callable sind (bzw. über das '__call__'-Attribut verfügen)?
Es kommt manchmal eine Fehlermeldung "XY ist nicht callable". Was für einen Fehler habe ich dann gemacht?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 19. März 2009, 14:42

callable bedeutet, dass du ein Objekt wie eine Funktion aufrufen kannst, also runde Klammern hinter seinen Namen setzen kannst und da evtl noch Parameter reinschreiben kannst:

Code: Alles auswählen

>>> l = [1, 2, 3]
>>> l.append(5)  # da l.append callable
>>> dir(l) # da dir callable
...
Wenn du die Fehlermeldung "object not callable" bekommst, heisst das, dass du ein Objekt wie eine Funktion aufrufst, das nicht callable ist:

Code: Alles auswählen

>>> "hallo"(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
>>> l(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Donnerstag 19. März 2009, 15:08

thanks.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Donnerstag 19. März 2009, 15:40

Einfacher (und lesbarer) ist es, wenn man die Funktion callable verwendet, die als Parameter das zu prüfende Objekt bekommt.
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 19. März 2009, 15:49

Code: Alles auswählen

bash-3.2$ python3
Python 3.0.1 (r301:69556, Feb 22 2009, 14:12:04)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> callable(lambda x: x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'callable' is not defined
*hust*
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Donnerstag 19. März 2009, 15:59

Oh, hab vergessen, dass mzh schon Python 3.0.1 hat.
Antworten