рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд╛рд░реНрдЯ 1 рдкрд░ рдиреЛрдЯреНрд╕

рдЕрдЬрдЧрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреБрдЫ рдиреЛрдЯреНрд╕ред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЕрдЬрдЧрд░ 2.3 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдореЗрдВ рдХреЗрд╡рд▓ рдирдИ рдХрдХреНрд╖рд╛рдУрдВ (рдирдИ рд╢реИрд▓реА рдХреА рдХрдХреНрд╖рд╛рдПрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рдЖрд▓реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдХреИрд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЦреЛрдЬреА рдЬрд╛рддреА рд╣реИрдВред


рд╡рд╕реНрддреБрдПрдВ


рдЕрдЬрдЧрд░ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдореЗрдВ 2 рд╡рд┐рд╢реЗрд╖ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ __class__ рдФрд░ __dict__ред
рдЙрджрд╛рд╣рд░рдгред

>>> def foo (): pass
...
>>> foo . __class__
<type 'function'>
>>> foo . __dict__
{}
>>> ( 42 ) . __dict__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__dict__'
>>> ( 42 ) . __class__
<type 'int'>
>>> class A ( object ):
... qux = 'A'
... def __init__ ( self , name):
... self . name = name
... def foo ( self ):
... print 'foo'
...
>>> a = A( 'a' )

A рдореЗрдВ __dict__ рдФрд░ __class__ рднреА рд╣реИ:

>>> a . __dict__ {'name': 'a'}
>>> a . __class__
<class '__main__.A'>
>>> type (a)
<class '__main__.A'>
>>> a . __class__ is type (a)
True


рд╡рд░реНрдЧ рдФрд░ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╣реИрдВред

>>> a . __class__ is type (a) is A
True


.__ рд╢реНрд░реБрддрд┐рдХрд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 'рдирд╛рдо' рдЖрдВрддрд░рд┐рдХ (рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ) рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓рд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИред рдФрд░ .__ class__ рд╡рд░реНрдЧ (рдкреНрд░рдХрд╛рд░) рдореЗрдВред

рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ self.foo = рдмрд╛рд░ рд▓рдЧрднрдЧ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ ред__ рддрд╛рдирд╛рд╢рд╛рд╣реА __ ['рдлреВ'] = рдмрд╛рд░ рдпрд╛ рдПрдХ рд╕рдорд╛рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред

__Dict__ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рдХреНрд▓рд╛рд╕ рдореЗрдердб, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдХреНрд▓рд╛рд╕ рд╡реИрд░рд┐рдПрдмрд▓реНрд╕, рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝, рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбреНрд╕ рдирд╣реАрдВ рд╣реИрдВред рдЗрди рд╕рднреА рдХреЛ __class__ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╕реЗ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реБрдП рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реА рдбрд┐рдлрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХ (рдЯрд╛рдЗрдк) рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ, рди рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдПред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

>>> class B ( object ):
... qux = 'B'
... def __init__ ( self ):
... self . name = 'B object'
... def bar ( self ):
... print 'bar'
...
>>> a . __dict__
{'name': 'a'}
>>> a . foo()
foo
>>> a . __class__
<class '__main__.A'>
>>> a . __class__ = B
>>> a . __class__
<class '__main__.B'>


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

A.name рдХрд╛ рдорд╛рди рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡рд░реНрдЧ рдмрджрд▓рдиреЗ рдкрд░ __in__ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

>>> a . __dict__
{'name': 'a'}

рдХрдХреНрд╖рд╛ рдЪрд░ рдФрд░ "рдЕрддреАрдд" рд╡рд░реНрдЧ рдП рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреЛ рдЧрдпрд╛ рдерд╛:
>>> a . foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'B' object has no attribute 'foo'

рдФрд░ рдпрд╣рд╛рдБ рд╡рд░реНрдЧ рдЪрд░ рдФрд░ рдХрдХреНрд╖рд╛ рдмреА рдЕрднрд┐рдЧрдо рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ:
>>> a . bar()
bar
>>> a . qux
'B'


рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ: рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди, рд░рд┐рдореВрд╡рд▓ рдФрд░ рд╕рд░реНрдЪ рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорддреБрд▓реНрдп рд╣реИред

ax = 1 <==> setattr (рдП, 'x', 1)
рдбреЗрд▓ рдРрдХреНрд╕ <==> рдбреЗрд▓реНрдЯреНрд░ (рдП, 'рдПрдХреНрд╕')
ax <==> getattr (рдП, 'x')

рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реЗрдЯрдЯреНрд░реИрдЯ рдФрд░ рдбреЗрд▓реНрдЯреНрд░ рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣реА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрджрд▓рддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, .__ рд╢реНрд░реБрддрд┐рдХрд╛), рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред

qux - рдПрдХ рд╡рд░реНрдЧ рдЪрд░ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ "рдмреА" рд╡рд░реНрдЧ рдмреА рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдЖрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ:

>>> a . qux
'B'
>>> a . __dict__
{'name': 'a'}


рдпрджрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрд▓реНрдЯрд╛ рдПрдХ .__ рдбрд┐рдХреНрдЯреНрд░реА рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛

>>> delattr (a, 'qux' )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: qux
>>> del a . qux
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: qux
>>> a . qux
'B'
>>>


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ (рд╕реЗрдЯ) рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реЗрдЯрдЯреНрд░рд╛ рдЗрд╕реЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП __dict__ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред

>>> b = B()
>>> b . qux
'B'
>>> a . qux = 'myB'
>>> a . qux
'myB'
>>> a . __dict__
{'qux': 'myB', 'name': 'a'}
>>> b . qux
'B'
>>>


рдЦреИрд░, рдЪреВрдВрдХрд┐ __dict__ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ 'qux' рд╣реИ, рдЗрд╕реЗ рдбреЗрд▓реНрдЯреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

>>> del a . qux

рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, a.qux рд╡рд░реНрдЧ рдЪрд░ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛:

>>> a . qux
'B'
>>> a . __dict__
{'name': 'a'}


рддреЛ:

рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ


рдХрдХреНрд╖рд╛рдПрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢реЗрд╖ рдЧреБрдг __class__ рдФрд░ __dict__ рднреА рд╣реИрдВред

>>> class A ( object ):
... pass
...


рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред

>>> A . __class__
<type 'type'>


рд╕рд╣реА __dict__ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╖ рдирд╣реАрдВ рд╣реИ

>>> A . __dict__
<dictproxy object at 0x1111e88>


рд▓реЗрдХрд┐рди __dict__ рдЖрдВрддрд░рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреЛ рддрд░реАрдХреЛрдВ, рд╡рд┐рд╡рд░рдгреЛрдВ, рдЪрд░, рдЧреБрдгреЛрдВ, рдФрд░ рдЕрдзрд┐рдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ:

>>> dict (A . __dict__)
{'__module__': '__main__', 'qux': 'A', '__dict__': <attribute '__dict__' of 'A' objects>, 'foo': <function foo at 0x7f7797a25c08>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
>>> A . __dict__ . keys()
['__module__', 'qux', '__dict__', 'foo', '__weakref__', '__doc__']<


рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ, __class__ рдФрд░ __dict__ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ: __bases__ - рдкреНрд░рддреНрдпрдХреНрд╖ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдПрдХ рд╕реВрдЪреА, __name__ - рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдоред [1]

рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рд╡рд░реНрдЧреЛрдВ (рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ) рдХрд╛ рд╕реЗрдЯ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕реЗрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐, рдЗрд╕рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреЛрдИ рднреА рд╡рд░реНрдЧ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдПрдХ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реИрдВред

рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░рджрд░реНрд╢рди рдЬреЛ рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдмреЗрд╣рддрд░ рд╕рдордЭрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд░реНрдЧ рдПрдХ рд╡рд╕реНрддреБ рд╣реИред
>>> class A ( object ):
... pass
...


>>> isinstance (A, object )
True


рдПрдХ рд╕рдВрдЦреНрдпрд╛ рднреА рдПрдХ рд╡рд╕реНрддреБ рд╣реИред

>>> isinstance ( 42 , object )
True


рдПрдХ рд╡рд░реНрдЧ рдПрдХ рд╡рд░реНрдЧ (рдпрд╛рдиреА рдкреНрд░рдХрд╛рд░) рд╣реИред

>>> isinstance (A, type )
True

рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╡рд░реНрдЧ (рдкреНрд░рдХрд╛рд░) рдирд╣реАрдВ рд╣реИред (рдмрд╛рдж рдореЗрдВ рдХреНрдпрд╛ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛)

>>> isinstance ( 42 , type )
False
>>>


рд╡реИрд╕реЗ, рдпрд╣ рднреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рд╣реИред

>>> a = A()
>>> isinstance (a, A)
True
>>> isinstance (a, object )
True
>>> isinstance (a, type )
False


рдФрд░ рдП рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ рд╣реИ - рд╡рд╕реНрддреБред

>>> A . __bases__
(<type 'object'>,)


рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднреА рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

>>> A . __name__
'A'
>>> A . __name__ = 'B'
>>> A
<class '__main__.B'>


рдЧреЗрдЯрдЕрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рд╡рд░реНрдЧ рдХреЗ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

>>> A . qux
'A'
>>> A . foo
<unbound method A.foo>
>>>


рдПрдХ рдирд┐рдпрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ


рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ, рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдкрд╣рд▓реЗ рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ __dict__ рдореЗрдВ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЧ рдХреЗ __dict__ рд╢рдмреНрджрдХреЛрд╢реЛрдВ (рдЬреЛ __class__ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ) рдФрд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреНрд░рдо рдореЗрдВ рдЕрдкрдиреЗ рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ __dict__ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

>>> class A ( object ):
... qux = 'A'
... def __init__ ( self , name):
... self . name = name
... def foo ( self ):
... print 'foo'
...
>>> a = A()
>>> b = A()


рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ a рдФрд░ b __dict__ рдореЗрдВ рдХреЛрдИ 'qux' рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рдЦреЛрдЬ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ (рд╡рд░реНрдЧ) рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╢рдмреНрджрдХреЛрд╢ __dict__ рдореЗрдВ рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ __dict__ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░:

>>> b . qux
'A'
>>> A . qux
'A'


рд╣рдо рд╡рд░реНрдЧ рдП рдХреА рдХреНрд╡реИрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдХрдХреНрд╖рд╛ рдП - рдП рдФрд░ рдмреА рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

>>> A . qux = 'B'
>>> a . qux
'B'
>>> b . qux
'B'
>>>


рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рд░рдирдЯрд╛рдЗрдо рдореЗрдВ, рдЖрдк рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

>>> A . quux = lambda self : 'i have quux method'
>>> A . __dict__[ 'quux' ]
<function <lambda> at 0x7f7797a25b90>
>>> A . quux
<unbound method A.<lambda>>


рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

>>> a . quux()
'i have quux method'


рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХреА рддрд░рд╣, рдЖрдк рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдЪрд░ qux:

>>> del A . qux

рд╡рд╣ __dict__ рд╕реЗ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд рд╣реБрдИ

>>> A . __dict__[ 'qux' ]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'qux'


рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛ рдЬрд╛рдПрдЧреАред

>>> a . qux
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'qux'
>>>


рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдЦреЛрдЬ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рд╣реЛрддреЗ рд╣реИрдВ: рдЦреЛрдЬ рд╣рдорд╛рд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ __dict__ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ __dict__ рд╕реБрдкрд░рдХреНрд▓реЙрд╕ рдХреЗ рд╢рдмреНрджрдХреЛрд╢ (рдЬреЛ __bases__ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ) рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд░реНрдЧ рдореЗрдВ __class__ рдФрд░ рдЙрдирдХреЗ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ред (рдЗрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВ)ред

рд▓рд┐рдВрдХ




рдиреЛрдЯ


[рез] рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ __module__ рдФрд░ __doc__ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

рдФрд░ рдкрдврд╝реЗрдВ


рдкрд╛рдпрдерди рдкрд╛рд░реНрдЯ 2 рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдиреЛрдЯреНрд╕
рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд╛рд░реНрдЯ 3 рдкрд░ рдиреЛрдЯреНрд╕

Source: https://habr.com/ru/post/In114576/


All Articles