Toute simple affectation-tout argument de toute fonction se comporte exactement de la même manière en Python: ce nom se fixe à une valeur différente, et ne fait rien d'autre que ce soit. Donc, loin d'être étrange (simplement = assigner à un argument spécifique dans une fonction spécifique n'a pas visible de l'extérieur.) "
" Aucun cas spécial n'est assez spécial pour enfreindre les règles ". effet quel qu'il soit), ce serait étonnant si ce cas spécifique fonctionnait d'une autre manière, juste à cause des noms de la fonction et de l'argument en question.
Si jamais vous voulez faire une classe qui construit un objet d'un autre type que lui-même, un tel comportement est bien sûr tout à fait possible - mais il est obtenu en remplaçant la méthode spéciale __new__
, pas__init__
:
class Test(object):
def __new__(cls):
return 5
t = Test()
print t
Cette émet 5
. Le comportement __new__
/__init__
en Python est un exemple du modèle de conception "construction en deux étapes": le "constructeur" proprement dit est __new__
(il construit et retourne un objet (normalement non initialisé) (normalement un nouveau du type/classe en question), __init__
est le « initialiseur » qui initialise correctement le nouvel objet
cela permet, par exemple, la construction d'objets qui sont immuables une fois construits: dans ce cas, tout doit se faire dans __new__
, avant que l'objet immuable. est construit, puisque, étant donné que l'objet est immuable, __init__
ne peut pas le muter pour l'initialiser
"De l'intérieur", pas vraiment: __new__, que j'ai suggéré, appartient à la classe, pas à l'instance. Vous pouvez normalement modifier le __class__ et/ou l'état (via __dict__) de la plupart des objets ("most" parce que certains sont immuables et/ou n'utilisent pas __dict__), mais pas le * IDENTITY * de l'objet - id (obj) sera la même avant et après votre altération. Le vaisseau de Télémaque me vient à l'esprit, mais cet autre sujet semble plus approprié pour une question différente, car il a peu à voir avec le titre de celui-ci. –
-1: Le remplacement d'une instance rompt un concept fondamental: les objets ont une identité unique. Renvoyer une nouvelle instance - c'est-à-dire - une Usine - a du sens. Qu'essayez-vous de faire? –