亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python錯誤:AttributeError:'str'對象沒有屬性'k'

Python錯誤:AttributeError:'str'對象沒有屬性'k'

一只斗牛犬 2021-05-30 11:01:51
s="ABC"for k in ["isalnum()", "isalpha()", "isdigit()", "islower()", "isupper()"]:    for c in s:        print(c.k)執行上述代碼時出現此錯誤“AttributeError: 'str' object has no attribute 'k'”。我提到了與此錯誤有關的其他類似問題,但與我的問題無關,我對python非常陌生。
查看完整描述

3 回答

?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

您可能想要調用您在s.


一種可能性是使用getattr以通過字符串名稱查找對象的屬性:


>>> s = "ABC"

>>> for k in ["isalnum", "isalpha", "isdigit", "islower", "isupper"]:

...     for c in s:

...         getattr(c, k)() # get the attribute, then call it

... 

True

True

True

True

True

True

False

False

False

False

False

False

True

True

True

或者,您可以str直接遍歷類的方法:


>>> s = "ABC"

>>> for k in [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]:

...     for c in s:

...         k(c)

... 

True

True

True

True

True

True

False

False

False

False

False

False

True

True

True

(我使用了您所做的變量名稱,但是我建議至少重命名k為method.)


查看完整回答
反對 回復 2021-06-01
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

列表中的元素只是字符串。即使它們不是,c.k也總是要引用文字屬性k,而不是與列表中的屬性相對應的屬性。


你需要使用getattr; 但是括號不是屬性名稱的一部分,您需要將其省略。


for k in ["isalnum", "isalpha", "isdigit", "islower", "isupper"]:

    for c in s:

        print(getattr(c, k)())


查看完整回答
反對 回復 2021-06-01
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

Daniel Roseman 的回答簡潔但完整地解釋了您的代碼有什么問題,以及如何使您的代碼工作。


但是,每當您發現自己嘗試使用事物的字符串名稱而不是事物本身時,Python中通常會有更好的方法。因此,值得尋找更好的方法,并決定是否要使用它。


在這種情況下,您真正想要的是字符串方法列表。事實上,你可以直接創建一個字符串方法列表:


for k in [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]:

那太棒了; 這些方法是 Python 中的一流對象,就像字符串或常規函數一樣。(事實上,在幕后,除非你使用Python 2,他們只是在功能)。但是你能對他們做什么?


您可以像調用函數一樣調用它們:


    for c in s:

        print(k(c))

如果你想了解它是如何工作的,你需要知道普通的方法調用是如何工作的。


當你寫這個:


s.isalpha()

……這有兩個部分。首先,s.isalpha在isalpha方法上查找方法type(s),并將其綁定到s實例,返回一個綁定的方法對象,該對象知道它要調用isalpha并且要在上調用它s。接下來,您調用綁定方法,這是通過調用isalpha和傳遞s作為第一個 ( self) 參數來實現的。


所以,你只是手動做同樣的事情:str.isalpha只是isalpha函數,你用s第一個 ( self) 參數調用它。


查看完整回答
反對 回復 2021-06-01
  • 3 回答
  • 0 關注
  • 1637 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號