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"
總結
以上是生活随笔為你收集整理的python定义类时括号_为什么在定义类时括号是可选的,而在定义函数时括号是必需的?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语言程序设计基础嵩天答案第二
- 下一篇: mongodb和mysql的对比_Mon