首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当__getattribute__和__getattr__存在时,Python类实例中会出现一个"rogue“形状属性?

为什么当__getattribute__和__getattr__存在时,Python类实例中会出现一个"rogue“形状属性?
EN

Stack Overflow用户
提问于 2021-07-09 14:42:46
回答 1查看 106关注 0票数 1

我正在尝试理解dunder 和getattr方法的函数。在实验中,我注意到在我的课堂上出现了一个意想不到的形状属性。我找不到任何解释来解释为什么会发生这种事。

代码语言:javascript
复制
class X:
    def __init__(self, count):
        self.count = count

x = X(42)

X显示在PyCharm调试模式中的结果如下:

代码语言:javascript
复制
x = {X}
  count = {int}42

鉴于

代码语言:javascript
复制
class X:
    def __init__(self, count):
        self.count = count

    def __getattribute__(self, item):
        # Calling the super class to avoid recursion
        return super(X, self).__getattribute__(item)

    def __getattr__(self, item):
        return self.__setattr__(item, 'fred')

x = X(42)

X显示在PyCharm调试模式中的结果如下:

代码语言:javascript
复制
x = {X}
  count = {int}42
  shape = {str} 'fred'

“形状”属性从何而来?它的目的是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-07-09 14:49:54

简单的答案是,如果有人试图访问shape属性,那么shape就创建它。因为xX上都没有存在的x.shape属性,所以通过调用x.__getattr__('shape')来解析x.shape

我无法解释谁(PyCharm本身?)尝试访问shape,或者为什么要这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68318637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档