我想知道如果我有这样的课
class Test(object):
def __init__(self):
self.a = 20
self.b = 30
obj = Test()
Run Code Online (Sandbox Code Playgroud)
当我这样做obj.a,然后首先被称为?
__getattr__或getattr或查找中__dict__['a']
与...相同 setattr
根据Python 2.7文档:
宾语.__getattr __(自我,名字)
当属性查找未在通常位置找到属性时调用(即,它不是实例属性,也不是在类树中找到自己).name是属性名称.此方法应返回(计算)属性值或引发AttributeError异常.
它说在通常的地方找不到.什么是平常的地方.我想知道什么时候被召唤
与此有什么不同 object.__getattribute__(self, name)
任何人都可以举例说明所有的使用方法
在以下代码中,我将一个 csv 文件导入 Python 的 Pandas 库并显示前 5 行,并查询 Pandas 数据框的“形状”。
import pandas as pd
data = pd.read_csv('my_file.csv')
data.head() #returns the first 5 rows of the dataframe
data.shape # displays the # of rows and # of columns of dataframe
Run Code Online (Sandbox Code Playgroud)
为什么该head()方法需要后面的空括号head但shape不需要?这与他们的类型有关吗?如果我调用时head没有使用空括号,则不会得到相同的结果。它head是一种方法,shape只是一个属性吗?
我如何将上述问题的答案推广到 Python 的其余部分?我在这里不仅要学习大熊猫,还要学习 Python。例如,诸如“当 _____ 是这种情况时,如果不提供参数,则必须包含空括号,但对于其他属性则不必?
根据官方文档,“数据属性覆盖具有相同名称的方法属性”。但是,我发现这是不正确的。
class C:
x = 111
def x(self):
print('I am x')
c = C()
print(c.x)
Run Code Online (Sandbox Code Playgroud)
上面代码中的print语句显示cx是一种方法,而不是分配给111的数据属性。因此,此代码表明数据属性不一定覆盖具有相同名称的方法属性,并且文档错误。谁能确认我的发现?
PS我在Python 3.5和Python 2.7中都尝试了该代码,并获得了相同的结果。