2015-04-04 62 views
-1

我想从基类继承变量,但解释器会引发错误。使用继承访问变量外的类

这里是我的代码:

class LibAccess(object): 
    def __init__(self,url): 
     self.url = url 

    def url_lib(self): 
     self.urllib_data = urllib.request.urlopen(self.url).read() 
     return self.urllib_data 

class Spidering(LibAccess): 
    def category1(self): 
     print (self.urllib_data) 


scrap = Spidering("http://jabong.com") 
scrap.category1() 

这是输出:

Traceback (most recent call last): 
    File "variable_concat.py", line 16, in <module> 
    scrap.category1() 
    File "variable_concat.py", line 12, in category1 
    print (self.urllib_data) 
AttributeError: 'Spidering' object has no attribute 'urllib_data' 

什么是代码中的问题?

+0

'urllib_data'仅在'url_lib'函数中添加。你可能想在打印'urllib_data'之前调用函数' – thefourtheye 2015-04-04 06:30:51

+0

问题在于,在LibAccess的__init __()和url_lib()中,你正在为一个对象的属性(即类的实例)赋值, ,而不是上课。 'self.var'在self的名称空间(即对象,类LibAccess的实例)中创建'var'。你从来没有创建过这样的对象。 你究竟想要达到什么目的? – Pynchia 2015-04-04 07:37:56

回答

0

在访问它之前,您需要定义self.urllib_data。简单的方法是在初始化期间创建它,例如

class LibAccess(object): 
    def __init__(self,url): 
     self.url = url 
     self.urllib_data = None 

这样,您可以确保它每次尝试访问它时都存在。从你的代码中,我认为你不想在初始化过程中获得实际的数据。或者,您可以拨打self.url_lib()来自__init__(..)第一次读取数据。稍后更新它将以与之前相同的方式完成。

+0

但我想得到这个“urllib_data”数据而不是无 – Mounarajan 2015-04-04 06:36:14

+2

@Mounarajan:在这种情况下,在初始化过程中调用self.url_lib(),如我的答案中所建议的。 – fuesika 2015-04-04 06:39:25