一直比较疑惑python中关于attrs的问题

今天看一个爬虫代码的时候遇到如下代码:

links = getLinks("/wiki/Python_(programming_language)")
print(links)
while(len(links) > 0):
    for link in links:
        print("-------------------")
        historyIPs = getHistoryIPs(link.attrs["href"])
        for historyIP in historyIPs:
            print(historyIP)
    newLink = links[random.randint(0, len(links)-1)].attrs["href"]
    links = getLinks(newLink)

像这里的link.attrs中的attrs我了解到是从得到的链接里面找到相对应的属性。
但像这样的话

>>> import attr
>>> @attr.s
... class C(object):
...     x = attr.ib(default=42)
...     y = attr.ib(default=attr.Factory(list))
...
...     def hard_math(self, z):
...         return self.x * self.y * z
>>> i = C(x=1, y=2)
>>> i
C(x=1, y=2)
>>> i.hard_math(3)
6
>>> i == C(1, 2)
True
>>> i != C(2, 1)
True
>>> attr.asdict(i)
{'y': 2, 'x': 1}
>>> C()
C(x=42, y=[])
>>> C2 = attr.make_class("C2", ["a", "b"])
>>> C2("foo", "bar")
C2(a='foo', b='bar')

这里的attrs有代表什么呐?
作为一个初学者会很疑惑这个attrs到底该如何去运用呐,又如何去分辨呐。我好像走进了死胡同。。。

阅读 9.6k
4 个回答
新手上路,请多包涵

如果没猜错的话,爬虫代码getLinks函数内部调用了BeautifulSoup,link.attr返回的是一个属性字典,是BeautifulSoup中为对象定义的一个方法,比如:

<a href="http://www.baidu.com" title="Yes me">Baidu</a>

就会返回:
{'href': 'http://www.baidu.com',
 'title': 'Yes me' }

跟你下面的 import attr 没啥关系。

去看 getLinks() 的源码

link.attrs 是此函数返回的dict

新手上路,请多包涵

attrs 提供了许多方法使你的类即方便又整洁,
比如你声明一个class,需要声明init方法接受参数,如果参数变动你还需要改动,这样很繁琐。attrs可以解决这种繁琐。给你推荐一篇文章
https://python.freelycode.com...
attrs好像只适应与Python3

推荐问题
宣传栏