使用__init__中的函数和实例方法定义实例变量

时间:2016-07-10 16:14:39

标签: python oop instance

我将以下类定义为:

def user_kitchen(handle):
    # return a BeautifulSoup object


class User(object):

    def __init__(self, handle):
        self.handle = str(handle)
        self.soup = user_kitchen(handle)
        self.details = self.find_details()

    def find_details(self):
        value_map = {}
        for detail, attribute in details_map:
            value = (self.soup).find_all(attrs=attribute)[0].text
            value_map[detail] = value
        return value_map

当我将类User实例化为:

me = User('torvalds')

我收到NameError: name 'self' is not defined

这是追溯:

In []: me = User('torvalds')
NameError                         Traceback (most recent call last)
<ipython-input-61-f6d334f2ee24> in <module>()
----> 1 me = User('torvalds')

/home/user.py in __init__(self, handle)
     28         value_map = {}
     29         for detail, attribute in details_map:
---> 30             value = (self.soup).find_all(attrs=attribute)[0].text
     31             value_map[detail] = value
     32         return value_map

/home/user.py in _find_details(detail)
     18 
     19 
---> 20 class User(object):
     21 
     22     def __init__(self, handle):

NameError: name 'self' is not defined

关于从__init__方法调用实例方法,我已经看了几个关于SO的类似问题:

但我无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

根据您的堆栈跟踪,我看到一个带有签名的方法 - _find_details(detail)。在该方法中,有一行像value = (self.soup).find_all(attrs=attribute)[0].text

您的方法不会将self作为第一个参数。因此在该上下文中找不到self。设为_find_details(self, detail) - 然后就可以了。