有时,我发现很难用名字来区分方法和属性而不附加括号。
例如:
keys()
类中有text
方法和xml.etree.ElementTree.Element
属性。
text
:text属性可用于保存与元素关联的其他数据。
keys()
:将元素属性名称作为列表返回。
是否有一些基本规则/约定要使text
属性,但keys()
方法?
如果我将text()
设为方法,则keys
设置属性。它似乎还可以。
答案 0 :(得分:6)
唯一真正的区别是一个是可调用的,一个是不可调用的,所以你可以使用内置函数callable()
和实际对象(不是一个带有它的名字的字符串)来确定它是否是调用。
在你的情况下:
>>> from xml.etree import ElementTree
>>> elt = ElementTree.Element("")
>>> callable(elt.keys)
True
>>> callable(elt.text)
False
答案 1 :(得分:2)
如果你在讨论命名约定,那么在Python中它们通常都是小写的。
如果你在谈论如何区分两者,
from collections import Callable, Container
if isinstance(attribute, Callable):
return attribute()
elif isinstance(attribute, str):
return attribute
elif isinstance(attribute, Container):
return 'Yes' if 'Blah' in attribute
else:
return str(attribute)
是检查变量是否指向特定类型对象的方法