рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рд╕реНрд▓рд╛рдЗрд╕, рдЕрдирдкреИрдХрд┐рдВрдЧ / рдкреИрдХрд┐рдВрдЧ рдХрд▓реЗрдХреНрд╢рди рдФрд░ рдмреВрд▓рд┐рдпрди рдСрдкрд░реЗрд╢рди рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рдкреНрд░рдХрд╛рд░ рджреЗрдЦреЗред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
a = [0] * 3 s = 'a' * 2 print(a, s)
рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЕрдиреБрднрд╡реА рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ
рд▓рд┐рдЦрддреЗ рд╕рдордп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рддрдВрддреНрд░ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ
a = [0] b = a b[0] = 1 print(a, b)
рдлрд┐рд░ рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
b = a * 2 b[0] = 2 print(a, b)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЬрдЧрд░ рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЪрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ, рдЕрд░реНрдерд╛рдд рдмреА рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ
b = [1] * 2
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рд╣реЛрдЧрд╛:
b = a * 2 b[0] = 2 print(a, b)
рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЕрдЬрдЧрд░ рд╕реВрдЪреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрдИ рдмрд╛рд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдИ рд╕реВрдЪреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╕рдордп, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдкрд░рд╕реНрдкрд░ рдХреЗ рд╕рд╛рде рд▓реЗрдЦрди рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдкрд░ рдирдХрд▓ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред
row = [0] * 2 matrix = [row] * 2 print(matrix)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╕реБрдиреНрдиред
рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рджрд╛рдИрдВ рдУрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
a = [0] a += (1,) a += {2} a += "ab" a += {1: 2} print(a)
рдПрдХ рдЪрд╛рд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢реНрди (рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП): рдЕрдЬрдЧрд░ рдореЗрдВ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рдпрд╛ рдореВрд▓реНрдп рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
def inc(a): a += 1 return a a = 5 print(inc(a)) print(a)
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдХреА рд╡рд╕реНрддреБ рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рди рдорд╛рди рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
def appended(a): a += [1] return a a = [5] print(appended(a))
C ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЪрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рднреА рддрд░реНрдХ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рд╕реНрдЯреИрдХ рдкрд░ рдЪрд░ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдСрдлрд╕реЗрдЯ рдХреЛ рдЬрд╛рдирддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЙрдирдХреА рд╕рд╣реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддреА рд╣реИред
рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд╕реНрдЯреИрдХ рдкрд░ рдЪрд░ рдХреА рдореЗрдореЛрд░реА рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА (рдпрд╛ рд╕реНрдЯреИрдХ рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░) рдореЗрдВ рд╕рдВрджрд░реНрдн рджреЗрдВред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЬрдм рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреИрдХ рдкрд░ рдорд╛рди рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рдорд╛рди рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗ, рдФрд░ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рд╣рдо рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЛ рдХреНрд░рдорд╢рдГ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реА рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рднреА рд▓рд┐рдВрдХ рдирдП рдореВрд▓реНрдп рдХреЛ "рджреЗрдЦреЗрдВрдЧреЗ"ред
рдЕрдЬрдЧрд░ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╕рдорд╛рди рддрдВрддреНрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдЪрд░ рдирд╛рдо рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рддрдВрддреНрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ:
var = "john"
рджреБрднрд╛рд╖рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ "рдЬреЙрди" рдФрд░ "рдирд╛рдо" рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдЬрдм рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдирд╛рдо рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдЬрдЧрд░ рдореЗрдВ рдкрд░рд╕реНрдкрд░ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди, рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рдирд╛рдо рдлрд┐рд░ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐, рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рднреА рдирд╛рдо рдкреБрд░рд╛рдиреА рд╡рд╕реНрддреБ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд▓рд┐рдВрдХ рдЧрд┐рдирддреА рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдирд╛рдо рдЪрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдореЗрдореЛрд░реА рдмрджрд▓ рдЬрд╛рддреА рд╣реИ; рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдирд╛рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ "рджреЗрдЦрддреЗ рд╣реИрдВ"ред
рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ
рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ ред
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
a = [1, 2, 3, 4, 5] def rev(l): l.reverse() return l l = a print(a, l)
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╢реЛрдзрдХ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛:
def change(): global a a += 1 a = 5 change() print(a)
рдиреЛрдЯ: рдпрд╣ рдордд рдХрд░реЛ (рдирд╣реАрдВ, рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдореЗрдВ рдирд╣реАрдВ)ред рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреБрдЫ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:
def func(a, b): return a + 1, b + 1
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рдФрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХреАрд╡рд░реНрдб рд╣реИ:
def private(value=None): def getter(): return value def setter(v): nonlocal value value = v return getter, setter vget, vset = private(42) print(vget())
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
def private(value=None): def getter(): return value def setter(v): nonlocal value value = v return getter, setter class Person: def __init__(self, name): self.getid, self.setid = private(name) adam = Person("adam") print(adam.getid()) print(adam.setid("john")) print(adam.getid()) print(dir(adam))
рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЕрдкрдиреЗ рдЖрдк рдХреЛ
__getattr__ ,
__setattr__ рдХреА
рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдпрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдЖрдк
__delattr__ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЬрдЧрд░ рдХреА рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ: __getattr__ рдФрд░
__getattribute__ ред
рдЙрдирдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдкрд╣рд▓реЗ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдХреНрд╖рд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реА рдереА, рдФрд░ рджреВрд╕рд░рд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╣реИред рдпрджрд┐ рджреЛрдиреЛрдВ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ __getattr__ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЗрд╕реЗ __getattribute__ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ __getattribute__ рдиреЗ рдПрдХ AttributeError рдЙрдард╛рдпрд╛ рд╣реИред
class Person(): def __getattr__(self, item): print("__getattr__") if item == "name": return "john" raise AttributeError def __getattribute__(self, item): print("__getattribute__") raise AttributeError person = Person() print(person.name)
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреИрд╕реЗ рдЕрдЬрдЧрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд░ рдФрд░ scopes рд╣реЗрд░рдлреЗрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
e = 42 try: 1 / 0 except Exception as e: pass print(e)
рдпрд╣, рд╡реИрд╕реЗ, рд╢рд╛рдпрдж рдПрдХрдорд╛рддреНрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рджреВрд╕рд░рд╛ рдЕрдЬрдЧрд░ рддреАрд╕рд░реЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
... print(e)