Kaydet (Commit) 29c1b97d authored tarafından Guido van Rossum's avatar Guido van Rossum

__call__, __getattr__ c.s.

üst 2e61103c
...@@ -613,10 +613,14 @@ must explicitly call it to ensure proper deletion of the base class ...@@ -613,10 +613,14 @@ must explicitly call it to ensure proper deletion of the base class
part of the instance. Note that it is possible for the \code{__del__} part of the instance. Note that it is possible for the \code{__del__}
method to postpone destruction of the instance by creating a new method to postpone destruction of the instance by creating a new
reference to it. It may then be called at a later time when this new reference to it. It may then be called at a later time when this new
reference is deleted. Also note that it is not guaranteed that reference is deleted. It is not guaranteed that
\code{__del__} methods are called for objects that still exist when \code{__del__} methods are called for objects that still exist when
the interpreter exits. the interpreter exits.
Note that \code{del x} doesn't directly call \code{x.__del__} -- the
former decrements the reference count for \code{x} by one, but
\code{x,__del__} is only called when its reference count reaches zero.
\item[\tt __repr__(self)] \item[\tt __repr__(self)]
Called by the \verb@repr()@ built-in function and by conversions Called by the \verb@repr()@ built-in function and by conversions
(reverse quotes) to compute the string representation of an object. (reverse quotes) to compute the string representation of an object.
...@@ -635,7 +639,8 @@ exceptions raised by comparisons are ignored, and the objects will be ...@@ -635,7 +639,8 @@ exceptions raised by comparisons are ignored, and the objects will be
considered equal in this case.) considered equal in this case.)
\item[\tt __hash__(self)] \item[\tt __hash__(self)]
Called by dictionary operations and by the built-in function Called for the key object for dictionary operations,
and by the built-in function
\code{hash()}. Should return a 32-bit integer usable as a hash value \code{hash()}. Should return a 32-bit integer usable as a hash value
for dictionary operations. The only required property is that objects for dictionary operations. The only required property is that objects
which compare equal have the same hash value; it is advised to somehow which compare equal have the same hash value; it is advised to somehow
...@@ -650,6 +655,50 @@ implements a \code{__cmp__} method it should not implement ...@@ -650,6 +655,50 @@ implements a \code{__cmp__} method it should not implement
key's hash value is a constant. key's hash value is a constant.
\obindex{dictionary} \obindex{dictionary}
\item[\tt __call__(self, *args)]
Called when the instance is ``called'' as a function.
\end{description}
\subsection{Special methods for attribute access}
The following methods can be used to change the meaning of attribute
access for class instances.
\begin{description}
\item[\tt __getattr__(self, name)]
Called when an attribute lookup has not found the attribute in the
usual places (i.e. it is not an instance attribute nor is it found in
the class tree for \code{self}). \code{name} is the attribute name.
Note that if the attribute is found through the normal mechanism,
\code{__getattr__} is not called. (This is an asymmetry between
\code{__getattr__} and \code{__setattr__}.)
This is done both for efficiency reasons and because otherwise
\code{__getattr__} would have no way to access other attributes of the
instance.
Note that at least for instance variables, \code{__getattr__} can fake
total control by simply not inserting any values in the instance
attribute dictionary.
\item[\tt __setattr__(self, name, value)]
Called when an attribute assignment is attempted. This is called
instead of the normal mechanism (i.e. store the value as an instance
attribute). \code{name} is the attribute name, \code{value} is the
value to be assigned to it.
If \code{__setattr__} wants to assign to an instance attribute, it
should not simply execute \code{self.\var{name} = value} -- this would
cause a recursive call. Instead, it should insert the value in the
dictionary of instance attributes, e.g. \code{self.__dict__[name] =
value}.
\item[\tt __delattr__(self, name)]
Like \code{__setattr__} but for attribute deletion instead of
assignment.
\end{description} \end{description}
......
...@@ -613,10 +613,14 @@ must explicitly call it to ensure proper deletion of the base class ...@@ -613,10 +613,14 @@ must explicitly call it to ensure proper deletion of the base class
part of the instance. Note that it is possible for the \code{__del__} part of the instance. Note that it is possible for the \code{__del__}
method to postpone destruction of the instance by creating a new method to postpone destruction of the instance by creating a new
reference to it. It may then be called at a later time when this new reference to it. It may then be called at a later time when this new
reference is deleted. Also note that it is not guaranteed that reference is deleted. It is not guaranteed that
\code{__del__} methods are called for objects that still exist when \code{__del__} methods are called for objects that still exist when
the interpreter exits. the interpreter exits.
Note that \code{del x} doesn't directly call \code{x.__del__} -- the
former decrements the reference count for \code{x} by one, but
\code{x,__del__} is only called when its reference count reaches zero.
\item[\tt __repr__(self)] \item[\tt __repr__(self)]
Called by the \verb@repr()@ built-in function and by conversions Called by the \verb@repr()@ built-in function and by conversions
(reverse quotes) to compute the string representation of an object. (reverse quotes) to compute the string representation of an object.
...@@ -635,7 +639,8 @@ exceptions raised by comparisons are ignored, and the objects will be ...@@ -635,7 +639,8 @@ exceptions raised by comparisons are ignored, and the objects will be
considered equal in this case.) considered equal in this case.)
\item[\tt __hash__(self)] \item[\tt __hash__(self)]
Called by dictionary operations and by the built-in function Called for the key object for dictionary operations,
and by the built-in function
\code{hash()}. Should return a 32-bit integer usable as a hash value \code{hash()}. Should return a 32-bit integer usable as a hash value
for dictionary operations. The only required property is that objects for dictionary operations. The only required property is that objects
which compare equal have the same hash value; it is advised to somehow which compare equal have the same hash value; it is advised to somehow
...@@ -650,6 +655,50 @@ implements a \code{__cmp__} method it should not implement ...@@ -650,6 +655,50 @@ implements a \code{__cmp__} method it should not implement
key's hash value is a constant. key's hash value is a constant.
\obindex{dictionary} \obindex{dictionary}
\item[\tt __call__(self, *args)]
Called when the instance is ``called'' as a function.
\end{description}
\subsection{Special methods for attribute access}
The following methods can be used to change the meaning of attribute
access for class instances.
\begin{description}
\item[\tt __getattr__(self, name)]
Called when an attribute lookup has not found the attribute in the
usual places (i.e. it is not an instance attribute nor is it found in
the class tree for \code{self}). \code{name} is the attribute name.
Note that if the attribute is found through the normal mechanism,
\code{__getattr__} is not called. (This is an asymmetry between
\code{__getattr__} and \code{__setattr__}.)
This is done both for efficiency reasons and because otherwise
\code{__getattr__} would have no way to access other attributes of the
instance.
Note that at least for instance variables, \code{__getattr__} can fake
total control by simply not inserting any values in the instance
attribute dictionary.
\item[\tt __setattr__(self, name, value)]
Called when an attribute assignment is attempted. This is called
instead of the normal mechanism (i.e. store the value as an instance
attribute). \code{name} is the attribute name, \code{value} is the
value to be assigned to it.
If \code{__setattr__} wants to assign to an instance attribute, it
should not simply execute \code{self.\var{name} = value} -- this would
cause a recursive call. Instead, it should insert the value in the
dictionary of instance attributes, e.g. \code{self.__dict__[name] =
value}.
\item[\tt __delattr__(self, name)]
Like \code{__setattr__} but for attribute deletion instead of
assignment.
\end{description} \end{description}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment