Sont des fonctions des objets en Python?
J'entends toujours cette déclaration en Python (pour des sujets tels que les décorateurs, etc. lorsque vous êtes de passage des fonctions, etc.) mais je n'ai jamais vraiment vu une élaboration sur cette.
Par exemple, est-il possible de créer une classe c
n'a qu'une seule méthode abstraite qui est appelée avec un ensemble de ouvert et fermé entre parenthèses.
i.e class c:
@abstractmethod
def method_to_be_called_by():
...
de sorte que vous pouvez avoir
c(whatever parameters are required)
Je pourrais être loin de la marque avec ma compréhension, j'étais juste curieux de ce qu'on entend par ce.
c(...)
crée un nouvel objet de type c
en appelant __init__
. Une fois que vous avez un nouvel objet, disons, par exemple,x
, appelant x()
appels c.__call__
.hmm, mais quand vous écrivez une fonction que vous n'avez pas besoin de créer une instance de l'utiliser. Pas sûr de ce que je suis absent.
Vous n'avez pas besoin de créer des instances de fonctions.
c
est un de la classe.vous n'avez pas à utiliser l'
int()
ou str()
types pour créer des entiers non plus, vous pouvez créer de celles-ci en utilisant la syntaxe, les littéraux de chaîne ou de type int littéraux, trop. 1
crée un objet de type int()
. Même avec des fonctions.en fait, Python n'créer des instances d'un type de fonction chaque fois que vous utilisez un
def
déclaration ou une lambda
expression. C'est juste transparent et traitées par la syntaxe.OriginalL'auteur user3684792 | 2014-08-13
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche pour le
__appel__
méthode. La fonction des objets ont cette méthode:Pas que l'interpréteur Python la boucle effectivement fait usage de cette méthode lors de la rencontre d'une fonction Python objet; optimisations dans la mise en œuvre de sauter directement au contenu du bytecode dans la plupart des cas.
Mais vous peut utiliser que sur votre propre classe personnalisée:
Démo:
Python crée des objets de fonction pour vous lorsque vous utilisez un
def
déclaration, ou vous utilisez unlambda
expression:Vous pouvez comparer cela à la création d'une chaîne ou un entier ou une liste à l'aide de la syntaxe littérale:
Ci-dessus crée 3 objets sans jamais suivre un type, Python fait tout pour vous en fonction de la syntaxe utilisée. La même chose s'applique à des fonctions.
Créer un vous-même peut être un peu plus complexe, vous devez disposer d'un code objet et la référence à un espace de noms global, à tout le moins:
Ici j'ai créé un objet de fonction par la réutilisation de la
function
type, le code objet de lafoo
fonction; le type de fonction n'est pas intégré dans le nom, mais le type existe vraiment et peut être obtenu en appelanttype()
sur une fonction existante instance.Moi aussi j'ai passé dans l'espace de noms global de mon interprète, et un nom; ce dernier est un argument facultatif; le nom est pris à partir du code objet.
l'interprète de poignées de la création de la fonction de cas pour vous, dans l'ensemble, vous n'avez pas toujours besoin de le faire vous-même. J'ai déjà illustrent comment créer une nouvelle instance du type de fonction; il faut un code objet. Code objets contiennent du bytecode Python et maintenant, ce sont vraiment de descendre dans le Python de mise en œuvre; lire le Python datamodel document si vous voulez connaître l'absolu nitty gritty de la façon qui s'adapte à tous ensemble.
aha - de sorte que l'instruction def efficacement initialise la fonction de l'objet?
Je vais vérifier que doc, ty. Vos compétences sont très forts
exactement. Tout comme les autres syntaxe crée un objet de la liste, ou un dictionnaire ou une chaîne de caractères ou un nombre entier.
OriginalL'auteur Martijn Pieters
Une simple façon de voir cela est de créer une fonction dans l'interpréteur Python
def bar(x): return x + 1
et ensuite utiliserdir(bar)
de voir les différents attributs de la magie, y compris__class__
.Oui, python fonctions sont pleins d'objets.
Pour une autre approche, les objets sont des fonctions si elles ont un la magie
__call__()
méthode.OriginalL'auteur shapr