Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
2e0b7557
Kaydet (Commit)
2e0b7557
authored
Kas 27, 2007
tarafından
Georg Brandl
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Futher update docs after unbound method removal.
üst
ff737954
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
98 additions
and
124 deletions
+98
-124
concrete.rst
Doc/c-api/concrete.rst
+2
-1
apiref.rst
Doc/distutils/apiref.rst
+3
-3
new.rst
Doc/library/new.rst
+2
-0
operator.rst
Doc/library/operator.rst
+1
-1
stdtypes.rst
Doc/library/stdtypes.rst
+13
-17
weakref.rst
Doc/library/weakref.rst
+4
-4
datamodel.rst
Doc/reference/datamodel.rst
+71
-96
bgenObjectDefinition.py
Tools/bgen/bgen/bgenObjectDefinition.py
+2
-2
No files found.
Doc/c-api/concrete.rst
Dosyayı görüntüle @
2e0b7557
...
@@ -2600,8 +2600,9 @@ There are some useful functions that are useful for working with method objects.
...
@@ -2600,8 +2600,9 @@ There are some useful functions that are useful for working with method objects.
function that will be called when the method is called. If this method should
function that will be called when the method is called. If this method should
be bound to an instance, *self* should be the instance and *class* should be the
be bound to an instance, *self* should be the instance and *class* should be the
class of *self*, otherwise *self* should be *NULL* and *class* should be the
class of *self*, otherwise *self* should be *NULL* and *class* should be the
class which provides the unbound method.
.
class which provides the unbound method.
.. XXX no unbound methods anymore...
.. cfunction:: PyObject* PyMethod_Class(PyObject *meth)
.. cfunction:: PyObject* PyMethod_Class(PyObject *meth)
...
...
Doc/distutils/apiref.rst
Dosyayı görüntüle @
2e0b7557
...
@@ -1965,12 +1965,12 @@ Subclasses of :class:`Command` must define the following methods.
...
@@ -1965,12 +1965,12 @@ Subclasses of :class:`Command` must define the following methods.
as the parent with sub-commands ``install_lib``, ``install_headers``, etc. The
as the parent with sub-commands ``install_lib``, ``install_headers``, etc. The
parent of a family of commands defines *sub_commands* as a class attribute; it's
parent of a family of commands defines *sub_commands* as a class attribute; it's
a list of 2-tuples ``(command_name, predicate)``, with *command_name* a string
a list of 2-tuples ``(command_name, predicate)``, with *command_name* a string
and *predicate* a
n unbound method
, a string or None. *predicate* is a method of
and *predicate* a
function
, a string or None. *predicate* is a method of
the parent command that determines whether the corresponding command is
the parent command that determines whether the corresponding command is
applicable in the current situation. (Eg. we ``install_headers`` is only
applicable in the current situation. (Eg. we ``install_headers`` is only
applicable if we have any C header files to install.) If *predicate* is None,
applicable if we have any C header files to install.) If *predicate* is None,
that command is always applicable.
that command is always applicable.
*sub_commands* is usually defined at the \*end\* of a class, because predicates
*sub_commands* is usually defined at the \*end\* of a class, because predicates
can be
unbound methods, so they must already have been defined. The canonical
can be
methods of the class, so they must already have been defined. The
example is the :command:`install` command.
canonical
example is the :command:`install` command.
Doc/library/new.rst
Dosyayı görüntüle @
2e0b7557
...
@@ -22,6 +22,8 @@ The :mod:`new` module defines the following functions:
...
@@ -22,6 +22,8 @@ The :mod:`new` module defines the following functions:
This function will return a method object, bound to *instance*.
This function will return a method object, bound to *instance*.
*function* must be callable.
*function* must be callable.
.. XXX no unbound methods anymore
.. function:: function(code, globals[, name[, argdefs[, closure]]])
.. function:: function(code, globals[, name[, argdefs[, closure]]])
...
...
Doc/library/operator.rst
Dosyayı görüntüle @
2e0b7557
...
@@ -390,7 +390,7 @@ objects.
...
@@ -390,7 +390,7 @@ objects.
Use the :func:`callable` built-in function instead.
Use the :func:`callable` built-in function instead.
Returns true if the object *obj* can be called like a function, otherwise it
Returns true if the object *obj* can be called like a function, otherwise it
returns false. True is returned for functions,
bound and unbound
methods, class
returns false. True is returned for functions,
instance
methods, class
objects, and instance objects which support the :meth:`__call__` method.
objects, and instance objects which support the :meth:`__call__` method.
...
...
Doc/library/stdtypes.rst
Dosyayı görüntüle @
2e0b7557
...
@@ -2215,23 +2215,19 @@ two flavors: built-in methods (such as :meth:`append` on lists) and class
...
@@ -2215,23 +2215,19 @@ two flavors: built-in methods (such as :meth:`append` on lists) and class
instance methods. Built-in methods are described with the types that support
instance methods. Built-in methods are described with the types that support
them.
them.
The implementation adds two special read-only attributes to class instance
If you access a method (a function defined in a class namespace) through an
methods: ``m.__self__`` is the object on which the method operates, and
instance, you get a special object: a :dfn:`bound method` (also called
``m.__func__`` is the function implementing the method. Calling ``m(arg-1,
:dfn:`instance method`) object. When called, it will add the ``self`` argument
arg-2, ..., arg-n)`` is completely equivalent to calling ``m.__func__(
to the argument list. Bound methods have two special read-only attributes:
m.__self__, arg-1, arg-2, ..., arg-n)``.
``m.__self__`` is the object on which the method operates, and ``m.__func__`` is
the function implementing the method. Calling ``m(arg-1, arg-2, ..., arg-n)``
Class instance methods are either *bound* or *unbound*, referring to whether the
is completely equivalent to calling ``m.__func__(m.__self__, arg-1, arg-2, ...,
method was accessed through an instance or a class, respectively. When a method
arg-n)``.
is unbound, its ``__self__`` attribute will be ``None`` and if called, an
explicit ``self`` object must be passed as the first argument. In this case,
Like function objects, bound method objects support getting arbitrary
``self`` must be an instance of the unbound method's class (or a subclass of
attributes. However, since method attributes are actually stored on the
that class), otherwise a :exc:`TypeError` is raised.
underlying function object (``meth.__func__``), setting method attributes on
bound methods is disallowed. Attempting to set a method attribute results in a
Like function objects, methods objects support getting arbitrary attributes.
However, since method attributes are actually stored on the underlying function
object (``meth.__func__``), setting method attributes on either bound or unbound
methods is disallowed. Attempting to set a method attribute results in a
:exc:`TypeError` being raised. In order to set a method attribute, you need to
:exc:`TypeError` being raised. In order to set a method attribute, you need to
explicitly set it on the underlying function object::
explicitly set it on the underlying function object::
...
...
Doc/library/weakref.rst
Dosyayı görüntüle @
2e0b7557
...
@@ -50,10 +50,10 @@ directly. The low-level machinery used by the weak dictionary implementations
...
@@ -50,10 +50,10 @@ directly. The low-level machinery used by the weak dictionary implementations
is exposed by the :mod:`weakref` module for the benefit of advanced uses.
is exposed by the :mod:`weakref` module for the benefit of advanced uses.
Not all objects can be weakly referenced; those objects which can include class
Not all objects can be weakly referenced; those objects which can include class
instances, functions written in Python (but not in C),
methods (both bound and
instances, functions written in Python (but not in C),
instance methods, sets,
unbound), sets, frozensets, file objects, :term:`generator`\s, type objects,
frozensets, file objects, :term:`generator`\s, type objects, :class:`DBcursor`
:class:`DBcursor` objects from the :mod:`bsddb` module, sockets, arrays, deques,
objects from the :mod:`bsddb` module, sockets, arrays, deques, and regular
and regular
expression pattern objects.
expression pattern objects.
Several builtin types such as :class:`list` and :class:`dict` do not directly
Several builtin types such as :class:`list` and :class:`dict` do not directly
support weak references but can add support through subclassing::
support weak references but can add support through subclassing::
...
...
Doc/reference/datamodel.rst
Dosyayı görüntüle @
2e0b7557
...
@@ -529,14 +529,21 @@ Callable types
...
@@ -529,14 +529,21 @@ Callable types
single: __kwdefaults__ (function attribute)
single: __kwdefaults__ (function attribute)
pair: global; namespace
pair: global; namespace
User-defined
methods
Instance
methods
.. index::
.. index::
object: method
object: method
object: user-defined method
object: user-defined method
pair: user-defined; method
pair: user-defined; method
A user-defined method object combines a class, a class instance (or ``None``)
An instance method object combines a class, a class instance and any
and any callable object (normally a user-defined function).
callable object (normally a user-defined function).
.. index::
single: __func__ (method attribute)
single: __self__ (method attribute)
single: __doc__ (method attribute)
single: __name__ (method attribute)
single: __module__ (method attribute)
Special read-only attributes: :attr:`__self__` is the class instance object,
Special read-only attributes: :attr:`__self__` is the class instance object,
:attr:`__func__` is the function object; :attr:`__doc__` is the method's
:attr:`__func__` is the function object; :attr:`__doc__` is the method's
...
@@ -544,77 +551,52 @@ Callable types
...
@@ -544,77 +551,52 @@ Callable types
method name (same as ``__func__.__name__``); :attr:`__module__` is the
method name (same as ``__func__.__name__``); :attr:`__module__` is the
name of the module the method was defined in, or ``None`` if unavailable.
name of the module the method was defined in, or ``None`` if unavailable.
.. index::
single: __doc__ (method attribute)
single: __name__ (method attribute)
single: __module__ (method attribute)
single: __func__ (method attribute)
single: __self__ (method attribute)
Methods also support accessing (but not setting) the arbitrary function
Methods also support accessing (but not setting) the arbitrary function
attributes on the underlying function object.
attributes on the underlying function object.
User-defined method objects may be created when getting an attribute of a class
User-defined method objects may be created when getting an attribute of a
(perhaps via an instance of that class), if that attribute is a user-defined
class (perhaps via an instance of that class), if that attribute is a
function object, an unbound user-defined method object, or a class method
user-defined function object or a class method object.
object. When the attribute is a user-defined method object, a new method object
is only created if the class from which it is being retrieved is the same as, or
When an instance method object is created by retrieving a user-defined
a derived class of, the class stored in the original method object; otherwise,
function object from a class via one of its instances, its
the original method object is used as it is.
:attr:`__self__` attribute is the instance, and the method object is said
to be bound. The new method's :attr:`__func__` attribute is the original
.. index::
function object.
single: __func__ (method attribute)
single: __self__ (method attribute)
When a user-defined method object is created by retrieving another method
object from a class or instance, the behaviour is the same as for a
When a user-defined method object is created by retrieving a user-defined
function object, except that the :attr:`__func__` attribute of the new
function object from a class, its :attr:`__self__` attribute is ``None``
instance is not the original method object but its :attr:`__func__`
and the method object is said to be unbound. When one is created by
attribute.
retrieving a user-defined function object from a class via one of its
instances, its :attr:`__self__` attribute is the instance, and the method
When an instance method object is created by retrieving a class method
object is said to be bound. Its :attr:`__func__` attribute is the
object from a class or instance, its :attr:`__self__` attribute is the
original function object.
class itself, and its :attr:`__func__` attribute is the function object
underlying the class method.
.. index:: single: __func__ (method attribute)
When an instance method object is called, the underlying function
When a user-defined method object is created by retrieving another method object
(:attr:`__func__`) is called, inserting the class instance
from a class or instance, the behaviour is the same as for a function object,
(:attr:`__self__`) in front of the argument list. For instance, when
except that the :attr:`__func__` attribute of the new instance is not the
:class:`C` is a class which contains a definition for a function
original method object but its :attr:`__func__` attribute.
:meth:`f`, and ``x`` is an instance of :class:`C`, calling ``x.f(1)`` is
equivalent to calling ``C.f(x, 1)``.
.. index::
single: __func__ (method attribute)
When an instance method object is derived from a class method object, the
single: __self__ (method attribute)
"class instance" stored in :attr:`__self__` will actually be the class
itself, so that calling either ``x.f(1)`` or ``C.f(1)`` is equivalent to
When a user-defined method object is created by retrieving a class method object
calling ``f(C,1)`` where ``f`` is the underlying function.
from a class or instance, its :attr:`__self__` attribute is the class itself (the
same as the :attr:`im_class` attribute), and its :attr:`__func__` attribute is
Note that the transformation from function object to instance method
the function object underlying the class method.
object happens each time the attribute is retrieved from the instance. In
some cases, a fruitful optimization is to assign the attribute to a local
When an unbound user-defined method object is called, the underlying function
variable and call that local variable. Also notice that this
(:attr:`__func__`) is called, with the restriction that the first argument must
transformation only happens for user-defined functions; other callable
be an instance of the proper class (:attr:`im_class`) or of a derived class
objects (and all non-callable objects) are retrieved without
thereof.
transformation. It is also important to note that user-defined functions
which are attributes of a class instance are not converted to bound
When a bound user-defined method object is called, the underlying function
methods; this *only* happens when the function is an attribute of the
(:attr:`__func__`) is called, inserting the class instance (:attr:`__self__`) in
class.
front of the argument list. For instance, when :class:`C` is a class which
contains a definition for a function :meth:`f`, and ``x`` is an instance of
:class:`C`, calling ``x.f(1)`` is equivalent to calling ``C.f(x, 1)``.
When a user-defined method object is derived from a class method object, the
"class instance" stored in :attr:`__self__` will actually be the class itself, so
that calling either ``x.f(1)`` or ``C.f(1)`` is equivalent to calling ``f(C,1)``
where ``f`` is the underlying function.
Note that the transformation from function object to (unbound or bound) method
object happens each time the attribute is retrieved from the class or instance.
In some cases, a fruitful optimization is to assign the attribute to a local
variable and call that local variable. Also notice that this transformation only
happens for user-defined functions; other callable objects (and all non-callable
objects) are retrieved without transformation. It is also important to note
that user-defined functions which are attributes of a class instance are not
converted to bound methods; this *only* happens when the function is an
attribute of the class.
Generator functions
Generator functions
.. index::
.. index::
...
@@ -731,16 +713,12 @@ Custom classes
...
@@ -731,16 +713,12 @@ Custom classes
pair: class; attribute
pair: class; attribute
When a class attribute reference (for class :class:`C`, say) would yield a
When a class attribute reference (for class :class:`C`, say) would yield a
user-defined function object or an unbound user-defined method object whose
class method object, it is transformed into an instance method object whose
associated class is either :class:`C` or one of its base classes, it is
:attr:`__self__` attributes is :class:`C`. When it would yield a static
transformed into an unbound user-defined method object whose :attr:`im_class`
method object, it is transformed into the object wrapped by the static method
attribute is :class:`C`. When it would yield a class method object, it is
object. See section :ref:`descriptors` for another way in which attributes
transformed into a bound user-defined method object whose :attr:`im_class`
retrieved from a class may differ from those actually contained in its
and :attr:`__self__` attributes are both :class:`C`. When it would yield a
:attr:`__dict__`.
static method object, it is transformed into the object wrapped by the static
method object. See section :ref:`descriptors` for another way in which
attributes retrieved from a class may differ from those actually contained in
its :attr:`__dict__`.
.. index:: triple: class; attribute; assignment
.. index:: triple: class; attribute; assignment
...
@@ -773,21 +751,18 @@ Class instances
...
@@ -773,21 +751,18 @@ Class instances
pair: class instance; attribute
pair: class instance; attribute
A class instance is created by calling a class object (see above). A class
A class instance is created by calling a class object (see above). A class
instance has a namespace implemented as a dictionary which is the first place in
instance has a namespace implemented as a dictionary which is the first place
which attribute references are searched. When an attribute is not found there,
in which attribute references are searched. When an attribute is not found
and the instance's class has an attribute by that name, the search continues
there, and the instance's class has an attribute by that name, the search
with the class attributes. If a class attribute is found that is a user-defined
continues with the class attributes. If a class attribute is found that is a
function object or an unbound user-defined method object whose associated class
user-defined function object, it is transformed into an instance method
is the class (call it :class:`C`) of the instance for which the attribute
object whose :attr:`__self__` attribute is the instance. Static method and
reference was initiated or one of its bases, it is transformed into a bound
class method objects are also transformed; see above under "Classes". See
user-defined method object whose :attr:`im_class` attribute is :class:`C` and
section :ref:`descriptors` for another way in which attributes of a class
whose :attr:`__self__` attribute is the instance. Static method and class method
retrieved via its instances may differ from the objects actually stored in
objects are also transformed, as if they had been retrieved from class
the class's :attr:`__dict__`. If no class attribute is found, and the
:class:`C`; see above under "Classes". See section :ref:`descriptors` for
object's class has a :meth:`__getattr__` method, that is called to satisfy
another way in which attributes of a class retrieved via its instances may
the lookup.
differ from the objects actually stored in the class's :attr:`__dict__`. If no
class attribute is found, and the object's class has a :meth:`__getattr__`
method, that is called to satisfy the lookup.
.. index:: triple: class instance; attribute; assignment
.. index:: triple: class instance; attribute; assignment
...
...
Tools/bgen/bgen/bgenObjectDefinition.py
Dosyayı görüntüle @
2e0b7557
...
@@ -236,8 +236,8 @@ class PEP252Mixin:
...
@@ -236,8 +236,8 @@ class PEP252Mixin:
def
assertions
(
self
):
def
assertions
(
self
):
# Check that various things aren't overridden. If they are it could
# Check that various things aren't overridden. If they are it could
# signify a bgen-client that has been partially converted to PEP252.
# signify a bgen-client that has been partially converted to PEP252.
assert
self
.
outputGetattr
.
im_func
==
PEP252Mixin
.
outputGetattr
.
im_func
assert
self
.
outputGetattr
.
__func__
==
PEP252Mixin
.
outputGetattr
.
__func__
assert
self
.
outputSetattr
.
im_func
==
PEP252Mixin
.
outputSetattr
.
im_func
assert
self
.
outputSetattr
.
__func__
==
PEP252Mixin
.
outputSetattr
.
__func__
assert
self
.
outputGetattrBody
==
None
assert
self
.
outputGetattrBody
==
None
assert
self
.
outputGetattrHook
==
None
assert
self
.
outputGetattrHook
==
None
assert
self
.
basechain
==
"NULL"
assert
self
.
basechain
==
"NULL"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment