如何通过名称区分python中的方法和属性

时间:2011-07-28 15:19:23

标签: python

有时,我发现很难用名字来区分方法和属性而不附加括号。

例如:
keys()类中有text方法和xml.etree.ElementTree.Element属性。

text:text属性可用于保存与元素关联的其他数据。

keys():将元素属性名称作为列表返回。


是否有一些基本规则/约定要使text属性,但keys()方法?

如果我将text()设为方法,则keys设置属性。它似乎还可以。

2 个答案:

答案 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)

是检查变量是否指向特定类型对象的方法