2015-07-02 20 views
5

Jeśli zrobię prostą funkcję w Pythonie, posiada zarówno __dict__ i func_dict jako atrybutów, z których oba zaczynają jako pustych słowniki:Co to jest func_dict?

>>> def foo(): 
...  return 42 
... 
>>> foo.__dict__ 
{} 
>>> foo.func_dict 
{} 

Jeśli dodać atrybut do foo, to pojawia się w obu:

>>> foo.x = 7 
>>> foo.__dict__ 
{'x': 7} 
>>> foo.func_dict 
{'x': 7} 

Jaka jest różnica między tymi atrybutami? Czy istnieje konkretny przypadek użycia jednego nad drugim?

Odpowiedz

8

Są to aliasy dla tego samego podstawowego dict. Powinieneś użyć __dict__, ponieważ func_dict zniknął w Pythonie 3.

+1

[* "Ta propozycja dodaje nowy słownik do obiektów funkcyjnych, zwany' func_dict' (aka '__dict__')." *] (Https: // www. python.org/dev/peps/pep-0232/) – CoryKramer