рдирдорд╕реНрддреЗ! рд╣рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрддреНрддрд░реА рдкрд╕рдВрдж рд╣реИред рд╣рдордиреЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреАрди рдкреЛрд╕реНрдЯ рдХрд┐рдП рд╣реИрдВ: рдкрд╣рд▓рд╛ - рдкрд╛рдпрдерди, рдкреАрдПрдЪрдкреА, рдЧреЛрд▓рдВрдЧ, рджреЗрд╡рдУрдкреНрд╕ рдореЗрдВ, рджреВрд╕рд░рд╛ - рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреЛ рдореЗрдВ, рддреАрд╕рд░рд╛ - рдХреЗрд╡рд▓ PHP рдореЗрдВред рдЖрдЬ рдХреА рдкреНрд░рд╢реНрдиреЛрддреНрддрд░реА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред
рд╣рдо рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдЧрд░реНрдореА рдХреЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдФрд░ PyCon рд░реВрд╕ 2018 рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рдкрд░ рдЧрд░реНрдордЬреЛрд╢реА рд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред (рд╡реИрд╕реЗ, рдХреМрди рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рд╣рдо рд╡рд╣рд╛рдВ рд╣реЛрдВрдЧреЗ)ред
рдХрдЯреМрддреА рдХреЗ рддрд╣рдд - рд╕рд╛рдд рд╕рд╡рд╛рд▓, рдПрдХ рджреЛрд╕реНрдд, рдЪрдкрд╛рдПрд╡ рдХреА рд╕рд▓рд╛рд╣, рдПрдмреАрдмреАрдП рдХреЗ рдЕрдВрд╢ ( рдХреНрдпрд╛? рд╣рд╛рдБ! ) рдФрд░ рдПрдХ рд╢рд╛рдВрдд рдЪреБрдЯрдХреАред
UPD: рд╣рдордиреЗ рдЙрддреНрддрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рдкрд╛рда рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ, рдФрд░ рд╡рд┐рдЬреЗрддрд╛ рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рд╡рд┐рдЬреЗрддрд╛ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд╣реИрдВред
рдХреНрд╡рд┐рдЬрд╝ рдХреЗ рд╡рд┐рдЬреЗрддрд╛ рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рд╡рд┐рдЬреЗрддрд╛рд╡рд┐рдЬреЗрддрд╛
Vadem
рдкреБрд░рд╕реНрдХрд╛рд░ рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рджреВрд╕рд░рд╛ рд╕реНрдерд╛рди: рдПрд╕рд┐рдХрд╛рдЗрдлреА
рддреАрд╕рд░рд╛ рд╕реНрдерд╛рди: рд╣рд┐рд╕реНрдЯреЛрдлреНрд░реА
рдЪреМрдерд╛ - рджрд╕рд╡рд╛рдВ рд╕реНрдерд╛рди: рд╕реНрд╡реЗрдЬрд╝реА_рдЖ , рд╕реНрд▓реЛрдирдкреАрд╕реА , рдиреЙрдЯ , IIRoadRunnerII , term1nal , alexchromets , Tihon_V ред
рдмреЛрдирд╕
рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рд╕рд╣реА рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдХрд┐ рд╣рдордиреЗ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрдирдХреЗ рдмреАрдЪ рдкрд╛рдВрдЪ рдЬреЛрдбрд╝реА рдореЛрдЬреЗ рдЦреЗрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдПрд╡рд┐рдЯреЛ рд╕реЗ рдХреВрд▓ рдореЛрдЬрд╝реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ: рд╕рдирдореИрди , grt_pretender , рд╡рд╢ , ipatov_dn , рдЗрдВрд╕реНрдЯрд┐рдЯреЛрд░рд┐рд╕
рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдВ

рдкреБрд░рд╕реНрдХрд╛рд░
рд╢реАрд░реНрд╖ рджрд╕ рдХреЗ рдмреАрдЪ рдкреБрд░рд╕реНрдХрд╛рд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдкрд╛рдпрдерди рдХреНрд╡рд┐рдЬрд╝ рдХреЗ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ , рд╣рдо рдПрдХ рдЙрдиреНрдирдд рдПрд╡рд┐рдЯреЛ-рдорд░реНрдЪ рдХрд┐рдЯ рднреЗрдЬреЗрдВрдЧреЗ: рдПрдХ рд╕реНрд╡реЗрдЯрд╢рд░реНрдЯ, рдореЛрдЬрд╝реЗ рдФрд░ рдЦреЛрдЦрд▓реА рд╣рдбреНрдбрд┐рдпрд╛рдБ - рдЖрдк рдЕрдВрджрд╛рдЬрд╝рд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмреИрдХрдПрдВрдб рд▓реИрдВрдЧреНрд╡реЗрдЬ рдФрд░ рдлреНрд░рдВрдЯреЗрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реЛрдЧрд╛ред рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреВрд╕рд░реЗ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЛ рд╣реЛрд▓реАрд╡реЙрди, рдореЛрдЬреЗ рдФрд░ рдПрдХ рдЯреА-рд╢рд░реНрдЯ рд╕реЗ рд╕рдореНрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреАрд╕рд░реЗ рдХреЛ рдПрдХ рд╣реА рд╕реЗрдЯ рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдЯреА-рд╢рд░реНрдЯ / рд╕реНрд╡реЗрдЯрд╢рд░реНрдЯ рдХреЗред рд╢реЗрд╖ рд╕рд╛рдд рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо рдПрдХ рдХрд╛рд░реНрдмрд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рдерд░реНрдорд▓ рдмреЛрддрд▓ рдЦреЗрд▓реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рд╛рдЗрдХ рдкрд░ рднреА рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╣реИрдХрд╛рдереЙрди рдкрд░ред

рд╕рд╡рд╛рд▓
* рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдкрд╛рдпрдерди 3 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдкреНрд░рд╢реНрди 1
рдЪрд░ t
рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛:
>>> t = (1, 2, [30,40]) >>> t[2] += [50, 60]
рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк:
TypeError
рдЙрдбрд╝ рдЬрд╛рдПрдЧрд╛, t
рд╣реЛрдЧрд╛ (1, 2, [30, 40, 50, 60])
,TypeError
рдЙрдбрд╝ рдЬрд╛рдПрдЧрд╛, t
рд╣реЛрдЧрд╛ (1, 2, [30, 40])
,(1, 2, [30, 40, 50, 60])
,(1, 2, [30, 40])
ред
рд╕рд╣реА рдЙрддреНрддрд░TypeError
рдЙрдбрд╝ рдЬрд╛рдПрдЧрд╛, t
рд╣реЛрдЧрд╛ (1, 2, [30, 40, 50, 60])
рдкреНрд░рд╢реНрди реи
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
foo_app/ snatch/ qwerty.py bar_app/ snatch/ mamamia.py
рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдЖрдк рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХреЗрдВ:
from snatch import qwerty, mamamia
рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк:
рд╕рд╣реА рдЙрддреНрддрд░рдКрдкрд░ рджрд┐рдП рдЧрдП рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдкреНрд░рд╢реНрди 3
рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
class A: def get_some(self): super().get_some() class B: def get_some(self): print('Some') class C(A, B): def get_some(self): super().get_some() c = C() c.get_some()
рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк:
AttributeError: 'C' object has no attribute 'get_some'
,AttributeError: 'super' object has no attribute 'get_some'
,Some
,- рд╢реВрдиреНрдпрддрд╛ (рдмрд┐рдирд╛ рдЪреИрдкрд╛рдП)ред
рд╕рд╣реА рдЙрддреНрддрд░ рдкреНрд░рд╢реНрди 4
рдЬрдм рдЖрдк рдпрд╣ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛:
class A: def foo(self): print('foo A') class B: def foo(self): print('foo B') class C(A, B): def foo(self): super().foo() class D(B, A): def foo(self): super().foo() class E(C, D): pass e = E() e.foo()
рдЙрддреНрддрд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк
foo A
,foo B
,TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
рд╕рд╣реА рдЙрддреНрддрд░TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
рдкреНрд░рд╢реНрди 5
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбреНрдпреВрд▓ foo.py рд╣реИ:
def bar(): print(', !')
рдФрд░ рдЖрдк рдПрдХ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
import importlib import foo from foo import bar input(', ') importlib.reload(foo) bar()
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЗрдирдкреБрдЯ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЖрдк foo.py рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ:
def bar(): print(', !')
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк "рдЗрдирдкреБрдЯ" рдХреЛ foo.py рдореЗрдВ рджрдмрд╛рдПрдВ рддрд╛рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВ ...
рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк:
ModuleReloadedException: method bar() was reloaded
,, !
ред, !
ред- рд╢реВрдиреНрдпрддрд╛ (рдФрд░ рдлрд┐рд░ рд╕реЗ рдХреЛрдИ рдЪрдкрд╛рдПрд╡ рдирд╣реАрдВ рд╣реИ)ред
рд╕рд╣реА рдЙрддреНрддрд░ рдкреНрд░рд╢реНрди 6
рдЬрдм рдЖрдк рдпрд╣ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛:
class A: def __init__(self): print('__init__ A', end=' ') class B: def __init__(self): print('__init__ B', end=' ') class C(A, B): pass c = C()
рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк:
__init__ A __init__ B
__init__ B __init__ A
__init__ A
__init__ B
рд╕рд╣реА рдЙрддреНрддрд░ рдкреНрд░рд╢реНрди 7
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
def not_(value): return not value result = not_(0), all(any([not_(x) for x in range(b)]) for b in range(10)) print(result)
рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк:
рд╕рд╣реА рдЙрддреНрддрд░ рд╕рдВрдХреНрд╖реЗрдк
рд╣рдо рдмреБрдзрд╡рд╛рд░, 25 рдЬреБрд▓рд╛рдИ рдХреЛ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ - рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рдЙрддреНрддрд░ рджреЗрдВ рддрд╛рдХрд┐ рдЕрдиреНрдп рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд╣реЛред
рдФрд░ (!) рдкреНрд░рд╢реНрдиреЛрддреНрддрд░реА рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реИрдмрд░ рдХреЗ рдЦрд╛рддреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред