【发布时间】:2016-09-11 04:01:08
【问题描述】:
下面是一段抽象的代码,可以简化我遇到的问题。 在此示例中,我有一个具有登录和注销属性的程序。 登录是版本无关的,注销是版本相关的。
class A(class):
def __init__(self):
self.version = "1.0"
self.login = "logged in"
self.login_message = "hello logger"
self.logout = {"1.0": "logged out",
"2.0": "logged out 2.0"}
self.logout_message = {"1.0": "goodbye logger",
"2.0": "goodbye logger 2.0"}
def perform(self, executor):
executor.do(self.login)
executor.do(self.logout)
executor 是执行实际操作的外部接口,它应该接收一个字符串。 do 函数无法更改。
该版本可以并且将在运行时更改,因此我一直在寻找某种全局装饰器/属性,当访问装饰属性时将调用函数。目标是在将每个版本发送到 executor.do 之前选择正确的字符串。
显而易见的答案是将perform 函数更改为executer.do(self.logout[self.version]),但不应以不同方式访问self.login 和self.logout。在某些继承中,self.logout 只是一个字符串,而perform 是共享的。
我在想这样的事情:
self.version = "1.0"
self.login = "logged in"
self.login_message = "hello logger"
@by_version
self.logout = {"1.0": "logged out",
"2.0": "logged out 2.0"}
@by_version
self.logout_message = {"1.0": "goodbye logger",
"2.0": "goodbye logger 2.0"}
def by_version(self, attribute):
return attribute[self.version]
这显然行不通。 这甚至可能吗?
【问题讨论】:
标签: python python-3.x properties decorator