我试图理解dunder getattribute和getattr方法的功能。在实验中,我注意到一个意想不到的形状属性出现在我的课堂上。我找不到任何解释来解释为什么会发生这种情况。
class X:
def __init__(self, count):
self.count = count
x = X(42)
在pycharm调试模式下显示的x结果如下:
x = {X}
count = {int}42
鉴于
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)
在pycharm调试模式下显示的x结果如下:
x = {X}
count = {int}42
shape = {str} 'fred'
“形状”属性从何而来,其用途是什么?
1条答案
按热度按时间np8igboo1#
简单的答案是
x.__getattr__
创造shape
属性,任何人都应该尝试访问它。因为没有现存的shape
属性x
或X
,x.shape
通过呼叫解决此问题x.__getattr__('shape')
.我无法解释是谁(pycharm本身?)试图访问
shape
或者他们为什么会这样做。