OOP- рдореБрдХреНрдд рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди

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

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

рдкреНрд░реЗрдХреНрд╖рдХ

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЗрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ "рдореЗрд▓" рд╣реИред рдЪрд╛рдмрд┐рдпрд╛рдБ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░реНрд╕ рдХреЗ рдирд╛рдо рд╣реИрдВ, рдФрд░ рдорд╛рди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИрдВред
from collections import defaultdict mailing_list = defaultdict(list) def subscribe(mailbox, subscriber): #   subscriber     mailbox mailing_list[mailbox].append(subscriber) def notify(mailbox, *args, **kwargs): #    mailbox,    for sub in mailing_list[mailbox]: sub(*args, **kwargs) 

рдЕрдм рдЖрдк рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдВрдЧрдд рд╣реИред
 def fun(insert): print 'FUN %s' % insert def bar(insert): print 'BAR %s' % insert 


рд╣рдо рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ:
 >>> subscribe('insertors', fun) >>> subscribe('insertors', bar) >>> subscribe('bars', bar) 


рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░, рд╣рдо рдЗрди рд╕рдорд╛рдЪрд╛рд░ рдкрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдирд╛рдПрдВ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдЧреНрд░рд╛рд╣рдХ рдШрдЯрдирд╛ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВ:
 >>> notify('insertors', insert=123) FUN 123 BAR 123 >>> notify('bars', 456) BAR 456 


рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рдзрд┐

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдврд╛рдВрдЪреЗ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЪрд░рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдп, рдЬреИрд╕реЗ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░, рдлрд╝рд┐рд▓реНрдЯрд░, рдХрдо, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдРрд╕реЗ рдкреИрдЯрд░реНрди рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдХреИрд╕реЗ рдХреНрд░реИрдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 def approved_action(checker, action, obj): # ,     obj  action, #   checker    if checker(obj): action(obj) import os def remove_file(filename): approved_action(os.path.exists, os.remove, filename) import shutil def remove_dir(dirname): approved_action(os.path.exists, shutil.rmtree, dirname) 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╣реИрдВ, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЬрд╛рдВрдЪрдирд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╣реИред
рдпрджрд┐ рдПрдХ "рдкреИрдЯрд░реНрди" рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╕реАрдзреЗ рдПрдХ рдкреИрдЯрд░реНрди рдХреЗ рд╡рд┐рдкрд░реАрдд рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЗ "рдкреБрдирд░реНрд╡рд┐рддреНрдд" рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдвреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
 def approved_action(obj, checker=lambda x: True, action=lambda x: None): if checker(obj): action(obj) from functools import partial remove_file = partial(approved_action, checker=os.path.exists, action=os.remove) remove_dir = partial(approved_action, checker=os.path.exists, action=shutil.rmtree) import sys printer = partial(approved_action, action=sys.stdout.write) 


рд░рд╛рдЬреНрдп

рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЖрд╡реЗрджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдореЛрджрди рдХреЗ рдХрдИ рдЪрдХреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
 from random import randint # ,      . #       #  randint  ,  -       def start(claim): print u' ' claim['state'] = 'analyze' def analyze(claim): print u' ' if randint(0, 2) == 2: print u'   ' claim['state'] = 'processing' else: print u' ' claim['state'] = 'clarify' def processing(claim): print u'   ' claim['state'] = 'close' def clarify(claim): if randint(0, 4) == 4: print u'   ' claim['state'] = 'close' else: print u' ' claim['state'] = 'analyze' def close(claim): print u' ' claim['state'] = None #   .       state = {'start': start, 'analyze': analyze, 'processing': processing, 'clarify': clarify, 'close': close} #     def run_claim(): claim = {'state': 'start'} #   while claim['state'] is not None: #  ,     fun = state[claim['state']] #    fun(claim) 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреИрдЯрд░реНрди рдХреЗ рдЖрд╡реЗрджрди рдкрд░ рдУрд╡рд░рд╣реЗрдб рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВред рдСрдЯреЛрдореЗрдЯрди рдХреЛ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рдмрджрд▓рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
 >>> run_claim()                     >>> run_claim()             


рдЯреАрдо

рдХрд╛рд░реНрдп "рдХреЙрд▓рдмреИрдХ" рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣реА рд╣реИ, рддрд╛рдХрд┐ рдХреЙрд▓ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдЕрдкрдиреЗ рдХреЛрдб рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗред
рдпрд╣ рдкреИрдЯрд░реНрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реБрдЖред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реНрд░рдорд┐рдХреЛрдВ рдиреЗ рднреА рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреИрдЯрд░реНрди рдХреЗ рдЦрд┐рддрд╛рдм рд╕реЗ рд╕рдореНрдорд╛рдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ - рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕рд╣реЗрдЬреЗрдВ, рдХреЙрд▓ рдХрд░реЗрдВред
 def foo(arg1, arg2): #   print 'FOO %s, %s' (arg1, arg2) def bar(cmd, arg2): #  .      foo... print 'BAR %s' % arg2 cmd(arg2 * 2) # ...   


рдХрдорд╛рдВрдб рдкреИрдЯрд░реНрди рдХреЗ рд╢реБрд░реБрдЖрддреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдпрд╛ рддреЛ рдХрд░реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ...
 >>> from functools import partial >>> bar(partial(foo, 1), 2) BAR 2 FOO 1, 4 

... рдпрд╛ рддреЛ рдореЗрдордиреЗ рдореЗрдВ рд▓рдкреЗрдЯ рдХрд░
 >>> bar(lambda x: foo(x, 5), 100) BAR 100 FOO 200, 5 


рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдХрд░реНрд╖

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

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


All Articles