python定义类时括号_为什么在定义类时括号是可选的,而在定义函数时括号是必需的?...

我认为你的问题的答案只是语法。这正是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"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值