首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能__init__我的自定义FancyURLopener与用户& passwd

为什么我不能__init__我的自定义FancyURLopener与用户& passwd
EN

Stack Overflow用户
提问于 2011-05-18 03:42:12
回答 2查看 1.2K关注 0票数 0

我无法编写自定义urllib.FancyURLopener,它在构造函数中初始化用户和passwd值。我可以让它在空构造函数和随后对setpasswd的调用中很好地工作。当我试图在构造函数中设置用户和密码时,我会收到一些奇怪的错误,涉及缺少的属性“tempcache”。我是否遗漏了一些关于init的Python语法/用法?

我希望能够在构造函数中指定用户和passwd,如下所示:

代码语言:javascript
复制
opener = MyRouterOpener("", "secretPassword")
page = opener.open("http://192.168.1.1/Status_Router.asp")
#do something with the page

试图这样做是失败的:

代码语言:javascript
复制
import urllib

class MyRouterOpener(urllib.FancyURLopener):
    def __init__(self, user, passwd):
        self.setpasswd(user, passwd)

    def setpasswd(self, user, passwd):
        self.__user = user
        self.__passwd = passwd

    def prompt_user_passwd(self, host, realm):
        return self.__user, self.__passwd

opener = MyRouterOpener("", "secretPassword")
statusPage = opener.open("http://192.168.1.1/Status_Router.asp")

输出:

代码语言:javascript
复制
Traceback (most recent call last):
  File "W:\Desktop\DynDns.enom.bad.py", line 15, in <module>
    statusPage = opener.open("http://192.168.1.1/Status_Router.asp")
  File "C:\Users\pengt\Python26\lib\urllib.py", line 179, in open
    if self.tempcache and fullurl in self.tempcache:
AttributeError: RouterOpener instance has no attribute 'tempcache'
Exception AttributeError: "RouterOpener instance has no attribute 'tempcache'" in <bound method RouterOpener.__del__ of <__main__.RouterOpener instance at 0x022AB9E0>> ignored

我也试过:

代码语言:javascript
复制
import urllib

class RouterOpener(urllib.FancyURLopener):
def __init__(self, user, passwd):
    self.__user = user
    self.__passwd = passwd

def prompt_user_passwd(self, host, realm):
    return self.__user, self.__passwd

opener = RouterOpener("", "secretPassword")
statusPage = opener.open("http://192.168.1.1/Status_Router.asp")

但这就产生了:

代码语言:javascript
复制
Traceback (most recent call last):
  File "W:\Desktop\DynDns.enom.bad.py", line 12, in <module>
    statusPage = opener.open("http://192.168.1.1/Status_Router.asp")
  File "C:\Users\pengt\Python26\lib\urllib.py", line 179, in open
    if self.tempcache and fullurl in self.tempcache:
AttributeError: RouterOpener instance has no attribute 'tempcache'
Exception AttributeError: "RouterOpener instance has no attribute 'tempcache'" in <bound method RouterOpener.__del__ of <__main__.RouterOpener instance at 0x0231B968>> ignored

我唯一能找到的就是:

代码语言:javascript
复制
import urllib

class MyRouterOpener(urllib.FancyURLopener):
    def setpasswd(self, user, passwd):
        self.__user = user
        self.__passwd = passwd

    def prompt_user_passwd(self, host, realm):
        return self.__user, self.__passwd

opener = MyRouterOpener()
opener.setpasswd("", "secretPassword")
statusPage = opener.open("http://192.168.1.1/Status_Router.asp")

但是,我将在单独的行上指定我的用户和passwd。我知道这真的没什么大不了的,但就像我前面说的,我真的很想知道我是否遗漏了一些关于继承和init等方面的内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-18 04:01:16

您可能必须调用父对象的init,它设置了tempcache属性。

代码语言:javascript
复制
def __init__(self, user, passwd):
    self.__user = user
    self.__passwd = passwd
    urllib.FancyURLopener.__init__(self)

(使用urllib.FancyURLopener创建者的适当参数调用它)

票数 5
EN

Stack Overflow用户

发布于 2011-05-18 04:05:11

请确保调用超类‘__init__方法,如下所示:

代码语言:javascript
复制
class MyRouterOpener(urllib.FancyURLopener):
    def __init__(self, user, passwd):
        # grr, old-style classes. :(
        urllib.FancyURLopener.__init__(self)

        # fancy custom fun stuff!
        self.__user = user
        self.__passwd = passwd
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6039613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档