рдкрд╛рдпрдерди рдореЗрдВ рдореИрдЬрд┐рдХ рдореЗрдердбреНрд╕ рдХреЗ рд▓рд┐рдП рдЧрд╛рдЗрдб

рдпрд╣ Rafe Kettler рджреНрд╡рд╛рд░рд╛ рдореИрдиреБрдЕрд▓ рдХреЗ 1.17 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИред


рд╕рд╛рдордЧреНрд░реА


  1. рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
  2. рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг
  3. рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдордирдорд╛рдиреА рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдХрд╛рдмреВ рдХрд░рдирд╛
  4. рдЙрдирдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐
  5. рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ
  6. рдХрд╕реНрдЯрдо рдХреНрд░рдо рдмрдирд╛рдПрдБ
  7. рдкреНрд░рддрд┐рдмрд┐рдВрдм
  8. рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛
  9. рдкреНрд░рд╕рдВрдЧ рдкреНрд░рдмрдВрдзрдХ
  10. рд╕рд╛рд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ
  11. рднрд╡рди рд╡рд┐рд╡рд░рдгрдХ
  12. рдирдХрд▓
  13. рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЕрдЪрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
  14. рдирд┐рд╖реНрдХрд░реНрд╖
  15. рдкрд░рд┐рд╢рд┐рд╖реНрдЯ 1: рдореИрдЬрд┐рдХ рдореЗрдердбреНрд╕ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ
  16. рдкрд░рд┐рд╢рд┐рд╖реНрдЯ 2: рдкрд╛рдпрдерди 3 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди


рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВ? рд╡реЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкрд╛рдпрдерди рдореЗрдВ рд╣реИрдВред рдпреЗ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ "рдЬрд╛рджреВ" рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рджреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, __init__ рдпрд╛ __lt__ )ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдЙрддрдиреЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рддрдирд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рднреА рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рдВрдЧрдарди рдХреЗ рдмрд┐рдирд╛ред рдЗрд╕рд▓рд┐рдП, рдкрд╛рдпрдерди рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХреА рдХрдореА рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЬреЛ рднреА рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВрдЧреЗред рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рд╛рдордЧреНрд░реА, рдореЗрдореЛ, рдпрд╛ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореИрдВрдиреЗ рдмрд╕ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдпрдерд╛рд╕рдВрднрд╡ рд╕реНрдкрд╖реНрдЯ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред


рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдЖрд░рдВрднреАрдХрд░рдгред


рд╣рд░ рдХреЛрдИ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рджреВ рд╡рд┐рдзрд┐ рдЬрд╛рдирддрд╛ рд╣реИ, __init__ ред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдореИрдВ x = SomeClass() рд╣реВрдВ, рддреЛ __init__ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдкрд╣рд▓реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг __new__ рдореЗрдердб рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рджреВрд╕рд░реЗ рдЫреЛрд░ рдкрд░ __del__ рд╡рд┐рдзрд┐ рд╣реИред рдЖрдЗрдП рдЗрди рддреАрди рдЬрд╛рджреБрдИ рддрд░реАрдХреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:


рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде __del__ , рдпрд╣рд╛рдБ __del__ рдФрд░ __del__ рдХрд╛ рдЙрджрд╛рд╣рд░рдг __init__ рдЧрдпрд╛ рд╣реИ:

 from os.path import join class FileObject: '''   ,     ,      .''' def __init__(self, filepath='~', filename='sample.txt'): #   filename  filepath      self.file = open(join(filepath, filename), 'r+') def __del__(self): self.file.close() del self.file 


рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдордирдорд╛рдиреА рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдХрд╛рдмреВ рдХрд░рдирд╛


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

 if instance.equals(other_instance): # do something 

рдмреЗрд╢рдХ, рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреНрд░рдо рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ ( __eq__ , рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрддрдиреА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдерд╛ :

 if instance == other_instance: #do something 

рдпрд╣ рдЬрд╛рджреБрдИ рддрд░реАрдХреЛрдВ рдХреА рддрд╛рдХрдд рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдирдХ рдСрдкрд░реЗрдЯрд░ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдереЗред


рдЬрд╛рджреБрдИ рддреБрд▓рдирд╛ рдХреЗ рддрд░реАрдХреЗ


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


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

 class Word(str): '''  ,     .''' def __new__(cls, word): #    __new__,    str  #       ( ) if ' ' in word: print "Value contains spaces. Truncating to first space." word = word[:word.index(' ')] #  Word       return str.__new__(cls, word) def __gt__(self, other): return len(self) > len(other) def __lt__(self, other): return len(self) < len(other) def __ge__(self, other): return len(self) >= len(other) def __le__(self, other): return len(self) <= len(other) 

рдЕрдм рд╣рдо рджреЛ Word ( Word('foo') рдФрд░ Word('bar') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Word('foo') рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ __eq__ рдФрд░ __ne__ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Word('foo') == Word('bar') рдХреЛ рд╕рдЪ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛)ред рд▓рдВрдмрд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреБрд▓реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рдирдХ рд╕рдорддреБрд▓реНрдпрддрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛ str рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред
рдЕрдм, рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рддреБрд▓рдирд╛ рдХреЗ рд╕рднреА рдЬрд╛рджреБрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рддреБрд▓рдирд╛рдУрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреГрдкрдпрд╛ рд╣рдореЗрдВ functools рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛, рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ __eq__ рдФрд░ рдПрдХ рдФрд░ ( __gt__ , __lt__ , рдЖрджрд┐) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкрд╛рдпрдерди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 2.7 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИ рдЖрдк рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ, рдЖрдк рдмрд╣реБрдд рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдмрдЪрд╛рдПрдВрдЧреЗред рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рд╢реНрд░реЗрдгреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ @total_ordering ред


рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЬрд╛рджреВ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ


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


рдЧреИрд░реА рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ


рдпреВрдирд┐рд░реА рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИ - рдирд┐рд╖реЗрдз, рдирд┐рд░рдкреЗрдХреНрд╖ рдореВрд▓реНрдп, рдФрд░ рдЗрд╕реА рддрд░рд╣ред


рдЖрдо рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рдХ


рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░реНрд╕ (рдФрд░ рдХреБрдЫ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: +, -, * рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдиреНрдпред рд╡реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЦреБрдж рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред


рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рдХ


рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреИрд╕реЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдЕрдВрдХрдЧрдгрд┐рдд рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛? рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмрдбрд╝реА, рдбрд░рд╛рд╡рдиреА рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 some_object + other 

рдпрд╣ рдПрдХ "рд╕рд╛рдорд╛рдиреНрдп" рдЬреЛрдбрд╝ рд╣реИред рд╕рдорддреБрд▓реНрдп рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рд╢рдмреНрджреЛрдВ рдХрд╛ рдХреНрд░рдо рд╣реИ:

 other + some_object 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпреЗ рд╕рднреА рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рдЕрдкрдиреЗ рдирд┐рдпрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, other рд░реВрдк рдореЗрдВ other рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ self ред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордХрдХреНрд╖ рдХреЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП __radd__ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ __radd__ рдЖрдк рдЦреБрдж рдХреЛ __add__ рдФрд░ рдЙрд╕ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдХреА рд╡рд╕реНрддреБ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ other ) рдореЗрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╖реНрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, some_object.__radd__ рдХреЗрд╡рд▓ рддрднреА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ __add__ other рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпреМрдЧрд┐рдХ рдХрд╛рд░реНрдп


рдкрд╛рдпрдерди рдореЗрдВ, рдпреМрдЧрд┐рдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рднреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд┐рд╢реНрд░рд┐рдд рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдпрд╣ "рд╕рд╛рдорд╛рдиреНрдп" рдСрдкрд░реЗрдЯрд░ рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИред рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 x = 5 x += 1 #   x = x + 1 

рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрд╛рдИрдВ рдУрд░ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, a += b , __iadd__ рдХреЛ a + b рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ a рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛)ред рдпрд╣рд╛рдБ рд╕реВрдЪреА рд╣реИ:

рд░реВрдкрд╛рдВрддрд░рдг рдореИрдЬрд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рд▓рд┐рдЦреЗрдВ


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рдпрдерди рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ float() ред рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:


рдЙрдирдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐


рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╕рдордп рдЗрдирд▓рд╛рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдо рд▓рдЧрднрдЧ рдЬрд╛рджреБрдИ рддрд░реАрдХреЛрдВ рдкрд░ рдореИрдиреБрдЕрд▓ рдХреЗ рдЙрдмрд╛рдК (рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рд░рд╣рд┐рдд) рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдм рдЬрдм рд╣рдордиреЗ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рджреВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред


рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ


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


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

 def __setattr__(self, name, value): self.name = value #  ,    ,     , #  __setattr__(). # ,      self.__setattr__('name', value). #      ,   ,     def __setattr__(self, name, value): self.__dict__[name] = value #      #     

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

рддреЛ рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реАрдЦрд╛? рдЙрдиреНрд╣реЗрдВ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рдЕрддреНрдпрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЕрддрд╛рд░реНрдХрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдЪреНрдЫрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ: рдкрд╛рдпрдерди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреБрд░реА рдЪреАрдЬреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╕рд░реНрд╡реЛрдкрд░рд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдкрд╣реБрдВрдЪ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ super, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ __dict__):

 class AccessCounter(object): ''',   value      .    ,   value.''' def __init__(self, val): super(AccessCounter, self).__setattr__('counter', 0) super(AccessCounter, self).__setattr__('value', val) def __setattr__(self, name, value): if name == 'value': super(AccessCounter, self).__setattr__('counter', self.counter + 1) #      . #       , #   AttributeError(name) super(AccessCounter, self).__setattr__(name, value) def __delattr__(self, name): if name == 'value': super(AccessCounter, self).__setattr__('counter', self.counter + 1) super(AccessCounter, self).__delattr__(name)] 


рдХрд╕реНрдЯрдо рдХреНрд░рдо рдмрдирд╛рдПрдБ


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


рдкреНрд░реЛрдЯреЛрдХреЙрд▓


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

рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпреЛрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдЗрдерди рдореЗрдВ рдордирдорд╛рдиреЗ рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓: рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ __len__рдФрд░__getitem__(рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЖрдЧреЗ)ред рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрдВрдЯреЗрдирд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрдВрдЯреЗрдирд░, рдкреНрд▓рд╕ __setitem__рдФрд░ рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП __delitem__ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рд╡рд╕реНрддреБрдПрдВ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╣реЛрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ __iter__рдХреМрди рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░рд┐рдЯрд░реНрдиред рдЗрд╕ рдЗрдЯрд░реЗрдЯрд░ рдХреЛ рдЗрдЯрд░реЗрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ __iter__(рдЦреБрдж рд╣реА рд░рд┐рдЯрд░реНрди) рдФрд░ nextред


рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЬрд╛рджреВ


рдЖрдЧреЗ рдХреА рджреЗрд░реА рдХреЗ рдмрд┐рдирд╛, рдпрд╣рд╛рдВ рдХрдВрдЯреЗрдирд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ:


рдЙрджрд╛рд╣рд░рдг


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдПрдХ рд╕реВрдЪреА рджреЗрдЦреЗрдВ рдЬреЛ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рд╕реНрдХреЗрд▓)ред

 class FunctionalList: '''-       : head, tail, init, last, drop, take.''' def __init__(self, values=None): if values is None: self.values = [] else: self.values = values def __len__(self): return len(self.values) def __getitem__(self, key): #      , list   return self.values[key] def __setitem__(self, key, value): self.values[key] = value def __delitem__(self, key): del self.values[key] def __iter__(self): return iter(self.values) def __reversed__(self): return FunctionalList(reversed(self.values)) def append(self, value): self.values.append(value) def head(self): #    return self.values[0] def tail(self): #      return self.values[1:] def init(self): #      return self.values[:-1] def last(self): #    return self.values[-1] def drop(self, n): #     n return self.values[n:] def take(self, n): #  n  return self.values[:n] 

() . , , , ( , ?), Counter , OrderedDict , NamedTuple .



, isinstance() issubclass() , . рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:


рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдЬрд╛рджреБрдИ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд╛рднрдХрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИред рдореИрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдЬрд╛рджреБрдИ рддрд░реАрдХреЛрдВ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рдмрд┐рддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛, рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдкрд╛рдпрдерди рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ: рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд╡рд╢реНрдпрдХ рднреА рдЗрд╕рдореЗрдВ "рдХреБрдЫ рднреА" рдмрд╣реБрдд рдХрдо рд╣реА рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпреЗ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрднреА рднреА рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рдХрд░рдХреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рд╡реЗ рд╣реИрдВ (рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣ рдореИрдиреБрдЕрд▓ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ!)ред


рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛


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

рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬрд╛рджреВ рдкрджреНрдзрддрд┐ рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдЙрдиреНрд╣реЗрдВ "рдХреЙрд▓" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдЗрддрдирд╛ рд╕реБрдЦрдж рдмрдирд╛рддреА рд╣реИред


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

 class Entity: ''',    . "",    .''' def __init__(self, size, x, y): self.x, self.y = x, y self.size = size def __call__(self, x, y): '''  .''' self.x, self.y = x, y # ... 


рдкреНрд░рд╕рдВрдЧ рдкреНрд░рдмрдВрдзрдХ


Python 2.5 рдореЗрдВ, рдПрдХ рдирдП рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХреЛрдб, рдПрдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ withред рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдирдИ рдирд╣реАрдВ рдереА (рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рд▓реЗрдХрд┐рди рдкреАрдИрдкреА 343 рдореЗрдВ рдЗрд╕рдиреЗ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреАред рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд╛рд╡ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ with:

 with open('foo.txt') as bar: #  -   bar 

рдкреНрд░рд╕рдВрдЧ рдкреНрд░рдмрдВрдзрдХ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрдерди рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реЛрдиреЗ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпрд╛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ withред рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЛ рдЬрд╛рджреВ рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


__enter__рдФрд░ __exit__рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╕рдорд╛рд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЗрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 class Closer: '''        close  with-.''' def __init__(self, obj): self.obj = obj def __enter__(self): return self.obj #     with- def __exit__(self, exception_type, exception_val, trace): try: self.obj.close() except AttributeError: #     close print 'Not closable.' return True #   

CloserрдПрдлрд╝рдЯреАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рдПрдХ рд╕реЙрдХреЗрдЯ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдХрд░реАрдмреА рддрд░реАрдХрд╛ рд╣реИ):

 >>> from magicmethods import Closer >>> from ftplib import FTP >>> with Closer(FTP('ftp.somesite.com')) as conn: ... conn.dir() ... # output omitted for brevity >>> conn.dir() # long AttributeError message, can't use a connection that's closed >>> with Closer(int(5)) as i: ... i += 1 ... Not closable. >>> i 6 

рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рд░реИрдкрд░ рдХреИрд╕реЗ рд╕рд╣реА рдФрд░ рдЧрд▓рдд рджреЛрдиреЛрдВ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдФрд░ рдЬрд╛рджреВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╢рдХреНрддрд┐ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдорд╛рдирдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рд░реЗрдлрд╝реНрд▓рд┐рдм рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ contextlib.closing()рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХрд░рддрд╛ рд╣реИ (рдорд╛рдорд▓реЗ рдХреЗ рдХрд┐рд╕реА рднреА рд╣реИрдВрдбрд▓ рдХреЗ рдмрд┐рдирд╛ рдЬрд╣рд╛рдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ close())ред


рд╕рд╛рд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ


Http://docs.python.org/2/library/abc.html рджреЗрдЦреЗрдВ ред


рднрд╡рди рд╡рд┐рд╡рд░рдгрдХ


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

рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП __get__, __set__рдпрд╛ __delete__ред рдЖрдЗрдП рдЗрди рдЬрд╛рджреБрдИ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:


рдЕрдм рд╡рд┐рд╡рд░рдгрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдЗрдХрд╛рдИ рд░реВрдкрд╛рдВрддрд░рдгред

 class Meter(object): '''  .''' def __init__(self, value=0.0): self.value = float(value) def __get__(self, instance, owner): return self.value def __set__(self, instance, value): self.value = float(value) class Foot(object): '''  .''' def __get__(self, instance, owner): return instance.meter * 3.2808 def __set__(self, instance, value): instance.meter = float(value) / 3.2808 class Distance(object): ''',  ,       .''' meter = Meter() foot = Foot() 


рдирдХрд▓


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


рдЗрди рдЬрд╛рджреВрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реЗрдВ? рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ - рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЖрдкрдХреЛ рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реА рд╡рд╕реНрддреБ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╢ (рд╢рд╛рдпрдж рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╢рдмреНрджрдХреЛрд╢) рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреВрд░реЗ рдХреИрд╢ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рд╛рдЭрд╛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЕрдЪрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЕрдЪрд╛рд░ рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдФрд░ рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрдиреБрднрд╡ рдФрд░ рднреНрд░рдо рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрд░реЛрдд рднреА рд╣реИред

рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐, рдЗрд╕рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ ( pickle), рдЗрд╕рдХреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдЕрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХреИрд╕реЗ рдХрд░реЗрдВ (рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдЫреЛрдбрд╝реЗрдВ)ред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдмрд╛рдж рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рд╕рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдпрд╛ рддреЛ exec()рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдпрд╛ рдкрдврд╝рдХрд░ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдкрд╛рда рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХреБрдЫ рдЦрддрд░рдирд╛рдХ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рддрд░рд╣ рд╕реЗ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░:

 import pickle data = {'foo': [1, 2, 3], 'bar': ('Hello', 'world!'), 'baz': True} jar = open('data.pkl', 'wb') pickle.dump(data, jar) #     jar jar.close() 

рдФрд░ рдЕрдм, рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЕрдкрдиреЗ рд╢рдмреНрджрдХреЛрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 import pickle pkl_file = open('data.pkl', 'rb') #  data = pickle.load(pkl_file) #    print data pkl_file.close() 

рдХреНрдпрд╛ рд╣реБрдЖ?рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред dataрдорд╛рдиреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ рд░рд╣рд╛ рд╣реЛред

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


рд╕реНрд╡рдпрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рдиред


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


рдЙрджрд╛рд╣рд░рдг


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реНрд▓реЗрдЯ рдмреЛрд░реНрдб ( Slate) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдкрд░ рдХреНрдпрд╛ рдФрд░ рдХрдм рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдмреЛрд░реНрдб рд╣рд░ рдмрд╛рд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдл рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИред

 import time class Slate: ''',     .      .''' def __init__(self, value): self.value = value self.last_change = time.asctime() self.history = {} def change(self, new_value): #  .     . self.history[self.last_change] = self.value self.value = new_value self.last_change = time.asctime() def print_changes(self): print 'Changelog for Slate object:' for k, v in self.history.items(): print '%s\t %s' % (k, v) def __getstate__(self): #    self.value or self.last_change. #   " "  . return self.history def __setstate__(self, state): self.history = state self.value, self.last_change = None, None 


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкрд╛рдЗрдерди рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдХреБрдЫ рдмрддрд╛рдирд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг, рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓реЗрдЦрди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореВрд▓реНрдпрд╡рд╛рди рдЬреНрдЮрд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдордзреНрдп-рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдирдП рд╡рд┐рдЪрд╛рд░ рдФрд░ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рдФрд░ рдЖрдкрдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкрд┐рдЯреЛрдирд┐рд╕реНрдЯ рд╣реИрдВ, рддреЛ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдХреБрдЫ рд╕рдВрднрд╡рддрдГ рднреВрд▓ рдЧрдП рдЬреНрдЮрд╛рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдХреБрдЫ рдирдП рдЯреНрд░рд┐рдХ рдкрд╛рдП рд╣реИрдВред рдЖрдкрдХреЗ рд╕реНрддрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рдкрд╛рдпрдерди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдпрд╛рддреНрд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рджреБрдИ рдереА (рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХреА)ред


рдкрд░рд┐рд╢рд┐рд╖реНрдЯ 1: рдореИрдЬрд┐рдХ рдореЗрдердбреНрд╕ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ


рдЬрд╛рджреВ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╕реАрдзреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ; рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдРрдб-рдСрди рдПрдХ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╣реИред
рдЬрд╛рджреВ рдХреА рд╡рд┐рдзрд┐рдЬрдм рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг)рд╡реНрдпрд╛рдЦреНрдпрд╛
__new__(cls [,...])instance = MyClass(arg1, arg2)__new__ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдкрд░ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛
__init__(self [,...])instance = MyClass(arg1, arg2)__init__ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдкрд░ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛
__cmp__(self, other)self == other, self > otherрдЖрджрд┐рдХрд┐рд╕реА рднреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
__pos__(self)+selfрдпреВрдиреАрд░реА рдкреНрд▓рд╕ рд╕рд╛рдЗрди
__neg__(self)-selfрдПрдХрд╛рдВрдд рдорд╛рдЗрдирд╕ рд╕рд╛рдЗрди
__invert__(self)~selfрдмрд┐рдЯрд╡рд╛рдЗрд╕ рдЙрд▓рдЯрд╛
__index__(self)x[self]рдЬрдм рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВ
__nonzero__(self)bool(self) ред if self:рд╡рд╕реНрддреБ рдХрд╛ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп
__getattr__(self, name)self.name # nameрдХреЛрдИ рднреА рдЕрдЪреВрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
__setattr__(self, name, val)self.name = valрдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ
__delattr__(self, name)del self.nameрдЧреБрдг рд╣рдЯрд╛рдПрдВ
__getattribute__(self, name)self.nameрдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
__getitem__(self, key)self[key]рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЖрдЗрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
__setitem__(self, key, val)self[key] = valрдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рд╕реМрдВрдкрдирд╛
__delitem__(self, key)del self[key]рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛
__iter__(self)for x in selfрдпрд╛рддреНрд░рд╛
__contains__(self, value)value in self ред value not in selfрдХреЗ рд╕рд╛рде рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рд╕рддреНрдпрд╛рдкрди in
__call__(self [,...])self(args)"рдХреЙрд▓" рдЙрджрд╛рд╣рд░рдг
__enter__(self)with self as x:with рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдСрдкрд░реЗрдЯрд░
__exit__(self, exc, val, trace)with self as x:with рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдСрдкрд░реЗрдЯрд░
__getstate__(self)pickle.dump(pkl_file, self)рдХреНрд░рдордмрджреНрдзрддрд╛
__setstate__(self)data = pickle.load(pkl_file)рдХреНрд░рдордмрджреНрдзрддрд╛


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдЖрдкрдХреЛ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рдмрдЪрд╛рддреА рд╣реИред


рдЕрдиреБрдкреВрд░рдХ 2: рдкрд╛рдпрдерди 3 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди


рд╣рдо рдХрдИ рдореБрдЦреНрдп рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдЬрдм рдкрд╛рдпрдерди 3 рдЕрдкрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ 2.x рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ:



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


All Articles