gpt4 book ai didi

Python:如何从 __getattribute__ 方法访问属性

转载 作者:太空狗 更新时间:2023-10-30 02:33:54 24 4
gpt4 key购买 nike

我有以下类(class):

class StrLogger(str):
def __init__(self, *args):
self._log_ = []
str.__init__(self, *args)
def __getattribute__(self, attr):
self._log_.append((self.__name__, attr))
return str.__getattribute__(self, attr)

我可以用 slog = StrLogger('foo') 初始化一个 StrLogger 并且我可以从 str 访问它的所有继承方法,并且它运行没有问题。问题是,当我尝试使用 slog._log_slog.__dict__['_log_'] 检索日志时,__getattribute__ 方法陷入无限递归。我明白为什么会这样,但我的问题是,如何访问日志?

最佳答案

我能想到一个办法。每当您需要绕过自定义属性访问时,请使用 object.__getattribute__(或任何您的父类(super class))。

class C(object):
def __init__(self):
self._log = []
def __getattribute__(self, attr):
_log = object.__getattribute__(self, '_log')
_log.append(attr)
return object.__getattribute__(self, attr)

>>> a = C()
>>> a.x = 1
>>> a.x
1
>>> a._log
['x', '_log']

关于Python:如何从 __getattribute__ 方法访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147252/

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