рдХреНрд░реЙрд╕-рдХреЛрд░ (рд╕реАрдПрд▓рдЖрд░ / рдЬреЗрд╡реАрдПрдо) рдкрд╛рдпрдерди рдХреЛрдб

рдпрд╣ рдПрдХ рдЕрддрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдШреБ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреИрд╕реЗ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдерд╛, рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реА # рд╕реЗ рдЬрд╛рд╡рд╛ рддрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╣рд░ рдЬрдЧрд╣ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред

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

1. рдореВрд▓ рдмрд╛рддреЗрдВ

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

2. рдореИрдВ рдХрд╣рд╛рдБ рд╣реВрдБ?

рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдХреНрд░рдо рдкрд░ рд╢реАрд░реНрд╖ рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред
isDotNet = sys.version.find('IronPython') > -1 


3. рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛

IronPython рдФрд░ Jython рдореЗрдВ, рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (IronPython рдореЗрдВ clr рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдФрд░ рдХреЗрд╡рд▓ Jython рдореЗрдВ рдкрде рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП), рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдЕрд▓рдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░реЗрдВ:

 def cpUseLibrary(lib_path, library): if isDotNet: sys.path.append(lib_path) import clr clr.AddReference('OurProduct20.' + library) else: sys.path.append(lib_path + '\\java_libs\\ourproduct20.' + library.lower() + '.jar') 


рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрди рдмреЗрд╡рдХреВрдл рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХреЛрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 cpUseLibrary(path_to_bins, 'Core') cpUseLibrary(path_to_bins, 'Formats.Common') 


4. рдЖрд╡рд╢реНрдпрдХ рдХрдХреНрд╖рд╛рдПрдВ рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИрдВред

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

 def cpImport(module, clazz, globs = globals()): # load class mname = ''; if isDotNet: mname = 'OurProduct.' + module else: mname = 'com.ourcompany.ourproduct.' + module.lower() pckg = __import__(mname, globals(), locals(), [clazz], -1) aliased_class = getattr(pckg, clazz) globs[clazz] = aliased_class 


рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ __import __ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ, __import __ () рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ "рдХрд╣реАрдВ рд╕реЗ рдХреБрдЫ рдЖрдпрд╛рдд" рдЕрдВрддрддрдГ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕рдорд╕реНрдпрд╛, рдЬреЛ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреА рд╣реИ, рдРрд╕реЗ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЧреНрд▓реЛрдмрд▓реНрд╕ () рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рднреА рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 cpImport('Core', 'OurProductLicense', globals()) cpImport('Formats', 'OurProductCommonFormats', globals()) 


рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдпрд╣ рд░рдирдЯрд╛рдЗрдореНрд╕ рдкрд░ рдПрдХреАрдХреГрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

5. рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди

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

  aliased_class = getattr(pckg, clazz) # add uppercased aliases for its lowercased methods (unless there's already an uppercased method with the same name) original_methods = aliased_class.__dict__.copy() for name, method in original_methods.iteritems(): if name[0:1] in string.uppercase: continue newname = name[0:1].upper() + name[1:] if hasattr(aliased_class, newname): continue setattr(aliased_class, newname, method) globs[clazz] = aliased_class 


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

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред Test.py рдлрд╝рд╛рдЗрд▓:

 from cptest import isDotNet, cpUseLibrary, cpImport cpUseLibrary('Core') cpUseLibrary('Formats.Common') cpImport('Core', 'OurProductLicense', globals()) cpImport('Formats', 'OurProductCommonFormats', globals()) OurProductLicense.SetProductID(".NET Product ID" if isDotNet else "JavaProductID") OurProductCommonFormats.Initialize(); 


рдпрд╣ рдПрдХ рдЯреИрдореНрдкреЛрд░рд┐рди рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рд░рд▓ ipy test.py / jython test.py рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЦреБрд╢реА рд╣реИ?

рдкреБрдирд╢реНрдЪ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ

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

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


All Articles