Python-何时使用()

Python-何时使用(),python,class,methods,Python,Class,Methods,各位 经过大量的搜索和阅读,我得出结论,方法使用()而属性不使用 使用arr=np.arrange(25)的示例: 要查找数组的大小,我将使用:arr.size这是一个属性 要查找数组的最大值,我将使用:arr.max()这是一个方法 对我来说,作为一名业余python程序员,我一辈子都说不出真正的区别是什么。(注意:我知道在u_init_u______)下可以找到一个属性,而方法却不能找到。)是否真的只是随机编写类的人决定将size作为属性,max作为方法?在编写代码时,有没有办法在不查找每个

各位

经过大量的搜索和阅读,我得出结论,方法使用()而属性不使用

使用
arr=np.arrange(25)
的示例:

要查找数组的大小,我将使用:
arr.size
这是一个属性

要查找数组的最大值,我将使用:
arr.max()
这是一个方法

对我来说,作为一名业余python程序员,我一辈子都说不出真正的区别是什么。(注意:我知道在u_init_u______)下可以找到一个属性,而方法却不能找到。)是否真的只是随机编写类的人决定将size作为属性,max作为方法?在编写代码时,有没有办法在不查找每个类的方法和属性列表的情况下直观地知道何时使用()和何时不使用


感谢您的帮助,如果有任何术语不正确,请向我道歉。

完整的故事有点复杂(关于所有内容,请参阅并遵循链接),但简而言之,您写道:

somevar.thing()
somevar.thing
当你想调用
东西时,你会写:

somevar.thing()
somevar.thing
当您想使用
对象的值时
。此用法与函数和非函数的用法相同:

def f(arg):
    print('f called, arg =', arg)
    return 42

x = f('douglas adams')
print('f returned', x)

y = x
print('I just set y to x:', y)

y = f
print('this time I did not call', y)
当运行时(作为Python3或使用Python2中的_future _导入打印_函数
)打印:

印刷品:

method called, arg is 42
请注意,如果不调用它,我们将其视为“绑定方法”:

产生:

x.method is <bound method K.method of <__main__.K object at ...>>

但最终都是描述符协议,有。

决定和讨论并不总是简单的,但如果(1)需要或可能需要一个或多个参数(例如,
np.arange(…)
,(2)通过调用创建一个新对象(例如,
list.copy()
),(3),则应该使用一种方法通过调用修改对象(例如,
list.sort()
),(4)通过调用启动复杂或长时间运行的计算(也是
list.sort()
),如果只是为了保存数据,可以使用属性。如果要执行某些操作(现在或将来),可以使用函数.getter和setter转换属性的行为类似于函数。
x.method is <bound method K.method of <__main__.K object at ...>>
$ python2 x.py
K.method is <unbound method K.method>
$ python3.6 x.py
K.method is <function K.method at ...>