Я пытаюсь построить модуль, используя шаблон проектирования «Мост», чтобы отделить абстракцию от его реализации. Мне также нужно свойство try_limit
, которое можно динамически изменять при запуске.
После некоторых проб и ошибок я написал bridge.py
, который работает, как я ожидал, но мне нужно написать свойство и установщик дважды, в классах Abstraction
и Implementor
соответственно. Есть ли другой питонский способ сделать это?
bridge.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import abc
class Abstraction(object):
def __init__(self, imp):
self._imp = imp
@property
def try_limit(self):
return self._imp.try_limit
@try_limit.setter
def try_limit(self, value):
self._imp.try_limit = value
def run(self, cmd):
ret = self._imp.run(cmd)
return ret
class Implementor(metaclass=abc.ABCMeta):
def __init__(self):
self._try_limit = 0
@property
def try_limit(self):
return self._try_limit
@try_limit.setter
def try_limit(self, value):
self._try_limit = value
@abc.abstractmethod
def run(self, cmd):
pass
class ImpA(Implementor):
def __init__(self, realtime_display=False):
super().__init__()
def run(self, arg):
# Implement A which use try_limit
# try_limit can be changed dynamically when running
class ImpB(Implementor):
def __init__(self):
super().__init__()
def run(self, arg):
# Implement B which also use try_limit
# try_limit can be changed dynamically when running
Среда: Python 3.6.3