gpt4 book ai didi

python - @property 的分配如何工作? (将 getter 分配给另一个变量。)

转载 作者:行者123 更新时间:2023-11-28 23:04:44 27 4
gpt4 key购买 nike

我有这样的代码:

class Debug(object):
...

@property
def ThreadAwareLogger(self):
if not self.logger_instance_for_current_thread:
self.logger_instance_for_current_thread=self.cloneMainLogger()
return self.logger_instance_for_current_thread

def cloneMainLogger(self):
return logger_instance_for_current_thread

class SomeOtherClass(object):

def __init__(self):
...
self.logger=debug.ThreadAwareLogger

def otherMethod(self):
...
self.logger.info("Message")

有问题的是赋值 self.logger=debug.ThreadAwareLogger。我不确定 self.logger 的内容是什么。我希望它成为整个 getter,并且我希望每次在 SomeOtherClass 中使用 self.logger 时都执行 getter。但我担心 self.logger 将只存储 getter logger_instance_for_current_thread 的结果。这意味着在分配时处于事件状态的线程的记录器。当我调用 self.logger.info("Message") 时,这个记录器不一定是正确的。

每次调用 self.logger.info("Message") 时,如何让 getter ThreadAwareLogger 执行?

旁注:为什么我实际上需要快捷方式 self.logger?当我决定用 AdvancedThreadAwareLogger 替换 ThreadAwareLogger 时,我将只更改一个分配,而不是对 self.logger.info("Message") 的数千次调用。 otherMethod 也不关心将使用哪个记录器。

编辑:

getter 的分配按照@unutbu 的回答中的描述工作。但是分配 setter/getter 会导致我以前没有想到的问题。

我实际上从 ThreadAwareLogger 调用方法 cloneMainLogger。现在 someOtherClass.logger 的调用以异常结束:AttributeError: 'SomeOtherClass' object has no attribute 'cloneMainLogger'。

到目前为止,我通过一个小 hack 绕过了这个问题。 SomeOtherClass 实际上有一个 Debug 实例。所以我在 ThreadAwareLogger 中调用了 debug.cloneMainLogger() 而不是 self.cloneMainLogger()。该程序现在可以运行,但我认为它真的很脏。

编辑 2:

如果我在方法中添加 self.comptreeLogger=Debug.ThreaAwareLogger 行;例如cloneMainLogger 我收到 AttributeError:'property' 对象没有属性 'debug'。结论:我仍然不明白解决方案。

最佳答案

获得整个属性的一种方法是创建另一个属性:

class SomeOtherClass:

@property
def logger(self):
return self.debug.ThreadAwareLogger

也许还有其他方法。

关于python - @property 的分配如何工作? (将 getter 分配给另一个变量。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com