桥梁设计模式中属性设置的python方法
我正在尝试使用“桥接”设计模式构建一个模块,以将抽象与其实现解耦。我还需要一个属性桥梁设计模式中属性设置的python方法,python,design-patterns,Python,Design Patterns,我正在尝试使用“桥接”设计模式构建一个模块,以将抽象与其实现解耦。我还需要一个属性try\u limit,它可以在运行时动态更改 经过一些尝试和错误之后,我编写了bridge.py,这正如我所期望的那样工作,但是我需要分别在抽象和实现者类中编写属性和setter两次。还有其他类似蟒蛇的方法吗 bridge.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- import abc class Abstraction(object): def
try\u limit
,它可以在运行时动态更改
经过一些尝试和错误之后,我编写了bridge.py
,这正如我所期望的那样工作,但是我需要分别在抽象
和实现者
类中编写属性和setter两次。还有其他类似蟒蛇的方法吗
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
#!/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
@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阅读Joe提供的wiki链接后,我发现我可以在
Implementor
类中删除属性try\u limit
,因为我已经直接将try\u limit
设置为实例'\u imp'。感谢Joe&Jonrsharpe对我问题的回答
bridge\u修订版.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
#!/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
@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您看到了吗?不,我在这里使用示例: