我认为你的问题的答案只是语法。这正是Python的设置方式,但我对它的设置方式的看法是:
我认为函数来自数学,比如:f(x) = x
所以当计算机编程语言被创造出来的时候,从模拟数学到编程语言似乎有某种逻辑上的连续性。
另一方面,类是计算机科学和重复内存管理的更多结构,因此它们不是以这样的方式创建的,但是由于它们具有功能的质量,所以它们被赋予了类似的符号。
对于Python,我将使用术语method来表示function,因为这是常用的行话。。。
我理解您的论点,即在无参数情况下,应该允许使用快捷方式定义class和method:对于没有继承的classes
对于没有参数的methods
我能想到的一个原因是使用和定义的一致性。让我们看一些例子:
定义:def funcA():
return 0
def funcB(arg):
return arg
你想称之为功能:>>> funcA()
>>> functB("an argument")
以及>>> f1 = funcA
>>> f2 = funcB
>>> f1()
>>> f2("another argument")
传递引用并调用它们。
声明之间的paranthesis语法与调用methods一致。
您需要放上那些空括号,否则解释器将给您一个对method的引用,而不是实际调用它。
这样做的一个好处是可以使代码非常清晰。
定义:class classA:
pass
class classB(object):
pass
用法:# create an instance
my_instance_of_A = classA()
my_instance_of_B = classB()
# pass a reference
my_ref_to_A = classA
my_ref_to_B = classB
# call by reference
new_A = my_ref_to_A()
new_B = my_ref_to_B()
这里的行为没有关于class是否继承的变化,其调用行为由其内部或继承的__init__方法的定义决定。
我认为当前设置的要求空的()使代码对未经训练的人更具可读性。
如果你真的真的想按你的要求去做,有一个解决办法。。。你可以这样做:func = lambda: "im a function declared with no arguments, and I didn't use parenthesis =p"
可以称之为:>>> func
at 0x6ffffef26e0>
>>> func()
"im a function declared with no arguments, and I didn't use parenthesis =p"