在查看dir中列出的属性和方法列表时,您如何知道属性和方法?

PyN*_*bie 5 python methods attributes python-datamodel

我正在努力学习用Python编程,并专注于更好地处理如何使用标准模块和其他模块.dir函数在解释器中似乎非常强大,但我想知道我是否因为缺少OOP背景而遗漏了某些内容.使用S.Lotts一书,我决定使用他的Die类来学习有关类和实例的语法和用法的更多信息.

这是原始代码:

class Die(object):
''' simulate a six-sided die '''
def roll(self):
    self.value=random.randrange(1,7)
    return self.value
def getValue(self):
    return self.value
Run Code Online (Sandbox Code Playgroud)

我正在看那个,在创建了一些实例后,我想知道单词value是否是某个关键字,以及在class语句中使用了word对象,所以我决定通过将类定义更改为以下内容来查找:

class Die():
''' simulate a six-sided die '''
def roll(self):
    self.ban=random.randrange(1,7)
    return self.ban
def getValue(self):
    return self.ban
Run Code Online (Sandbox Code Playgroud)

这个变化向我展示了我从我的实例中获得了相同的行为,但是当我执行dir时,实例中缺少以下方法/属性:

'__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__',
 '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__',
_repr__', '__setattr__', '__str__', '__weakref__'
Run Code Online (Sandbox Code Playgroud)

我还想到,当我在一个实例上做了一个dir时,我有一个额外的关键字禁令,我最终想到的是我的实例的一个属性.这有助于我理解我可以使用d1.ban来访问我的实例的值.我可以弄清楚这是一个属性的唯一原因是我键入了d1.happy并得到了一个AttributeError 我发现d1.GetValue是一个附加到Die的方法,因为这就是解释器告诉我的.

因此,当我尝试使用像BeautifulSoup这样复杂但有用的模块时,如何在输入dir(实例)后知道列出的内容是我的实例的属性还是我的实例的方法.我需要知道这一点,因为这个问题让我觉得有了属性我调用方法的结果和方法我在我的实例上调用一个函数.

这个问题可能过于冗长,但确实有助于我更好地理解属性和方法之间的区别.具体来说,当我看到在我的Die类的实例上调用dir的结果时,我看到了这一点

['__doc__', '__module__', 'ban', 'getValue', 'roll']
Run Code Online (Sandbox Code Playgroud)

因此,通过查看列表中的属性和方法而不必诉诸试验和错误或者输入hasattr(myInstance,suspAttributeName)来查看它似乎很有用.

在发布我试过的问题之后

for each in dir(d1):
    print hasattr(d1,each)
Run Code Online (Sandbox Code Playgroud)

这严格告诉我所有方法都是属性.但我不能在没有()的情况下调用方法,所以在我看来hasattr()是误导性的.

小智 8

而不是:" print hasattr(d1,each)",尝试:" print each, type(getattr(d1,each))".你应该找到有用的结果.

此外,取代dir()尝试help(),我认为你真的在寻找.