我认为您的问题的答案只是语法。这就是 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")
传递引用并调用它们。
method声明之间的括号语法与调用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
<function <lambda> at 0x6ffffef26e0>
>>> func()
"im a function declared with no arguments, and I didn't use parenthesis =p"
但是python holy book says No