一直以來對python中函數括號的使用,有點分不清楚,到底什么時候用括號,什么時候不用括號,造成了很大看困惑。
今天來總結下。
1 class aaa(): 2 y = 'you' 3 def __init__(self): 4 self.y = 'me' 5 def foo(self,aa): 6 self.name = aa 7 return (aa) 8 9 x = aaa 10 print("1---->",x) 11 print("2---->",x.y) 12 print("3---->",x.foo) 13 # print("========分割線=========") 14 15 x = aaa() 16 print("4---->",x) 17 print("5---->",x.y) 18 # print("--------分割線---------") 19 20 print("6---->",x.foo) 21 print("7---->",x.foo('u')) 22 print("8---->",x.foo('cc')) 23 # print("~~~~~~~~分割線~~~~~~~~~")
執行結果:
1----> <class '__main__.aaa'> 2----> you 3----> <function aaa.foo at 0x000001F6592626A8> 4----> <__main__.aaa object at 0x000001F659296B70> 5----> me 6----> <bound method aaa.foo of <__main__.aaa object at 0x000001F659296B70>> 7----> u 8----> cc
根據結果來分析:
1、 x = aaa aaa是一個類名,后面沒加括號,打印結果 ,表明x是個類
2、 由於沒有加括號,類沒有實例化,y為公有屬性,因此x.y打印的結果為you
3、foo為aaa類中的函數,稱為方法或屬性,同時 foo后面也未加括號,打印結果為foo在內存中的地址
注意,此時 print(x.foo())或者 print(x.foo('aa')) 都會報錯,
print(x.foo())
TypeError: foo() missing 2 required positional arguments: 'self' and 'aa'
print(x.foo('aa'))
TypeError: foo() missing 1 required positional argument: 'aa'
由此可見,根據提示,foo后面應該帶兩個參數,這里為啥要帶兩個參數呢。因為x沒有初始化,x沒有作為參數傳到foo函數里
所以
print(x.foo(x,'cc'))
print(x.foo(aaa,'cc'))
得到結果 cc
cc

可以看出,這里self指的是類本身
4、 x = aaa() 類aaa后面帶括號,打印結果 aaa 類內存中的地址
5、由於x = aaa() 表示aaa被實例化,因此會調用構造方法中的y,打印結果是self.y的值
6、表示foo是類中的方法,foo沒有帶括號,不執行函數。
7和8 ,foo帶括號,執行foo函數。此處 foo里只帶一個參數“u” 或者"cc" ,並沒有和上面提到的帶兩個參數,因為aaa實例化了
因此得出結論。
類帶括號,類實例化,
函數帶括號,執行函數,返回函數的結果
否則不執行,只是調用類或函數本身。
