mirror of
https://github.com/python/cpython.git
synced 2025-11-03 11:23:31 +00:00
merge
This commit is contained in:
commit
c03dc0f164
2 changed files with 72 additions and 0 deletions
|
|
@ -387,6 +387,77 @@ object and the argument list, and the function object is called with this new
|
||||||
argument list.
|
argument list.
|
||||||
|
|
||||||
|
|
||||||
|
.. _tut-class-and-instance-variables:
|
||||||
|
|
||||||
|
Class and Instance Variables
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
Generally speaking, instance variables are for data unique to each instance
|
||||||
|
and class variables are for attributes and methods shared by all instances
|
||||||
|
of the class::
|
||||||
|
|
||||||
|
class Dog:
|
||||||
|
|
||||||
|
kind = 'canine' # class variable shared by all instances
|
||||||
|
|
||||||
|
def __init__(self, name):
|
||||||
|
self.name = name # instance variable unique to each instance
|
||||||
|
|
||||||
|
>>> d = Dog('Fido')
|
||||||
|
>>> e = Dog('Buddy')
|
||||||
|
>>> d.kind # shared by all dogs
|
||||||
|
'canine'
|
||||||
|
>>> e.kind # shared by all dogs
|
||||||
|
'canine'
|
||||||
|
>>> d.name # unique to d
|
||||||
|
'Fido'
|
||||||
|
>>> e.name # unique to e
|
||||||
|
'Buddy'
|
||||||
|
|
||||||
|
As discussed in :ref:`tut-object`, shared data can have possibly surprising
|
||||||
|
effects with involving :term:`mutable` objects such as lists and dictionaries.
|
||||||
|
For example, the *tricks* list in the following code should not be used as a
|
||||||
|
class variable because just a single list would be shared by all *Dog*
|
||||||
|
instances::
|
||||||
|
|
||||||
|
class Dog:
|
||||||
|
|
||||||
|
tricks = [] # mistaken use of a class variable
|
||||||
|
|
||||||
|
def __init__(self, name):
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
def add_trick(self, trick):
|
||||||
|
self.tricks.append(trick)
|
||||||
|
|
||||||
|
>>> d = Dog('Fido')
|
||||||
|
>>> e = Dog('Buddy')
|
||||||
|
>>> d.add_trick('roll over')
|
||||||
|
>>> e.add_trick('play dead')
|
||||||
|
>>> d.tricks # unexpectedly shared by all dogs
|
||||||
|
['roll over', 'play dead']
|
||||||
|
|
||||||
|
Correct design of the class should use an instance variable instead::
|
||||||
|
|
||||||
|
class Dog:
|
||||||
|
|
||||||
|
def __init__(self, name):
|
||||||
|
self.name = name
|
||||||
|
self.tricks = [] # creates a new empty list for each dog
|
||||||
|
|
||||||
|
def add_trick(self, trick):
|
||||||
|
self.tricks.append(trick)
|
||||||
|
|
||||||
|
>>> d = Dog('Fido')
|
||||||
|
>>> e = Dog('Buddy')
|
||||||
|
>>> d.add_trick('roll over')
|
||||||
|
>>> e.add_trick('play dead')
|
||||||
|
>>> d.tricks
|
||||||
|
['roll over']
|
||||||
|
>>> e.tricks
|
||||||
|
['play dead']
|
||||||
|
|
||||||
|
|
||||||
.. _tut-remarks:
|
.. _tut-remarks:
|
||||||
|
|
||||||
Random Remarks
|
Random Remarks
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,7 @@ Matt Chisholm
|
||||||
Lita Cho
|
Lita Cho
|
||||||
Anders Chrigström
|
Anders Chrigström
|
||||||
Tom Christiansen
|
Tom Christiansen
|
||||||
|
Renee Chu
|
||||||
Vadim Chugunov
|
Vadim Chugunov
|
||||||
Mauro Cicognini
|
Mauro Cicognini
|
||||||
David Cinege
|
David Cinege
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue