亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python面向對象中特殊變量main,name以及關于self的一系列問題

系統 1976 0

回過頭去敲循環語句的時候,我又碰到了問題:

var = 1
while var == 1:
... num = int(input("輸入一個數字 :"))
... print("你輸入的數字是: ", num)
...
輸入一個數字 :4
你輸入的數字是: 4
輸入一個數字 :7
你輸入的數字是: 7
輸入一個數字 :7.8
Traceback (most recent call last):
File " ", line 2, in
ValueError: invalid literal for int() with base 10: '7.8'

首先input函數永遠返回一個str類型:

a=input("input: ")
input: 6
type(a)

b=input("input: ")
input: 8.9
type(b)

而Int()函數就很神奇,它可以把一個str類型或者一個number轉換成一個整數:

int(3.4)
3
int('100')
100
int('2.3')
Traceback (most recent call last):
File " ", line 1, in
ValueError: invalid literal for int() with base 10: '2.3'
int('air')
Traceback (most recent call last):
File " ", line 1, in
ValueError: invalid literal for int() with base 10: 'air'
int(float('2.3'))
2

int()函數應該只能將擁有表面意義的字符串直接轉化成整數,也就是說int函數是個封裝,里面應該是有一個內置函數把str轉化成ASCII或者別的啥我也不知道。
而int函數只能把要轉化的string轉化成一個十進制的數,這也就是為什么air無法轉化成數字:a對應了ASCII中的97,97不在0-9之間,大于9的數對int來說就是invalid的。
為了驗證猜想,可以調用int函數的另一個功能:

int(12,16)
Traceback (most recent call last):
File " ", line 1, in
TypeError: int() can't convert non-string with explicit base
int('12',16)
18

只有當輸入是一個字符串的時候,他才能把16進制的12轉化成10進制的18。因為int函數里只設置了一個內置函數(一個能將字符串轉化成ASCII碼之類的東西再把ASCII碼轉回來的函數)。

然后我開始學習了正則表達式和面向對象,正則表達式...可能因為東西太多了我沒啥筆記,面向對象就還是有一點點的:

class Test:
... def ppr(self):
... print(self)
... print(self.__class__)
...
t=Test()
t.ppr()
<__main__.Test object at 0x0000019F9A9EA908>

挺簡單的,就是self指一個實例,ppr這個方法里面的print(self)返回了self這個實例的地址;self.__class__則返回了一個類,可以看出Test就是那個類.main應該就是所有東西調用的地方
以__class__,__main__為代表的以雙下劃線為開頭雙下劃線結尾的特殊變量(可以直接訪問的變量)。__class__是什么很好理解,它指向類,在這里應當是Test這個類。然而這個__main__在查了document之后解釋為:the environment where the top-level script is run. The name of the scope in which top-level code executes. A module's __name__is set equal to "__main__" when read from standard input, a script or from an interactive prompt.看上去這個__main__的出現似乎之和運行方式有關。
__name__is a built-in variable which evaluates to the name of the current module.
(大型偷懶現場)
https://stackoverflow.com/que...
https://www.geeksforgeeks.org...
https://www.journaldev.com/17...
前兩個講了__main__和以及和__name__的關系,第三個鏈接講述main函數

感覺今天腦子不轉了:

class A(object):
... def f(self):
... return 123
...
a=A()
print (A.f())
Traceback (most recent call last):
File " ", line 1, in
TypeError: f() missing 1 required positional argument: 'self'
print (a.f())
123

第一個A.f()我以為它是一個類方法,它卻返回我缺少位置參數self,self在我眼中代表了一個實例,這不是說明我缺少了一個實例作為參數,也就是說這個A.f()實際是A.f(self)而這個self需要的是一個像a一樣的實例?
a.f()是一個方法,但要是前面的假設是正確的,那么它其實應該是A.f(a)
對我看到了這個:

class Test:
... def ppr():
... print(self)
...
t=Test()
t.ppr()
Traceback (most recent call last):
File " ", line 1, in
TypeError: ppr() takes 0 positional arguments but 1 was given

也就是說在定義ppr的時候沒有給self,而t.ppr()在內部處理的時候變成了Test.ppr(t),因為沒有定義參數,所以括號里并不應該給一個變量,所以出現了這個提示。
再加上self:

class Test:
... def ppr(self):
... print(self)
...
t=Test()
t.ppr()
<__main__.Test object at 0x00000241F67CB848>
t.ppr(3)
Traceback (most recent call last):
File " ", line 1, in
TypeError: ppr() takes 1 positional argument but 2 were given
t.ppr()=Test.ppr(t),實例地址在0x00000241F67CB848,嗯很完美
t.ppr(3)=Test.ppr(t,3),多給了一個變量,所以提示只需要一個但是給了兩個。

這是問題的前一半,我留了后一半打算慢慢想,因為我試了各種組合發現如下:

class Test:
... def ppr(self):
... print(self)
...
t=Test()
Test.ppr

t.ppr
<__main__.Test object at 0x00000241F67CBA48>>
t.ppr()
<__main__.Test object at 0x00000241F67CBA48>

Test.ppr顯然是一個類方法,但是返回了一個function,或許python中把方法當成了一種特殊函數處理(保留問題)?
t.ppr和t.ppr()返回了同一個地址但是前者返回了綁定了實例的方法的的地址,
后者加了括號,返回的是這個方法的結果,即self的地址,兩個地址是相同的,也沒什么問題
再試一個:

class A(object):
... def f(self):
... return 123
...
A.f

A.f()
Traceback (most recent call last):
File " ", line 1, in
TypeError: f() missing 1 required positional argument: 'self'
a=A()
a.f
<__main__.A object at 0x0000027D9CD9C988>>
a.f()
123

a.f返回綁定了實例的方法所在地址,a.f()在這里更直觀一些返回了方法的結果,也沒有問題
那么今天就遺留了一個為什么A.f是一個function而不是一個method的問題。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人精品高清不卡在线 | 亚洲国产一区视频 | 99色在线视频 | 极品毛片| 午夜久久久久久 | 神马影院在线观看我不卡 | 欧美一区二区在线观看 | 欧美精品 日韩 | 99国产精品高清一区二区二区 | 免费看一级黄色毛片 | 久久中文字幕一区二区 | 亚洲精品一区二区不卡 | 久久国产精品麻豆映画 | 久久久久久久综合日本亚洲 | 日韩欧美在线不卡 | 视频精品一区二区三区 | 国内一区二区 | 国产精品久久久久9999高清 | 色婷婷精品大全在线视频 | 日本特黄特色aaa大片免费欧 | 九九热欧美 | 免费看黄色的网站 | 99久久免费国产精精品 | 国产亚洲精品国产 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 日韩精品在线一区 | 久久精品免费一区二区三区 | 中文字幕一视频97色伦 | 可以看美女隐私的网站 | 日本免费视屏 | 成人影院久久久久久影院 | www国产精品com | 一本一本久久α久久精品66 | 一级毛片免费视频观看 | 性欧美成人免费观看视 | 欧美xxxxx毛片 | 中文字幕视频在线 | 精品天海翼一区二区 | 欧美成人天天综合在线视色 | 日韩深夜 | 亚洲三级天堂 |