为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 1554 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号