我将以下类定义为:
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的类似问题:
但我无法解决这个问题。
答案 0 :(得分:1)
根据您的堆栈跟踪,我看到一个带有签名的方法 - _find_details(detail)
。在该方法中,有一行像value = (self.soup).find_all(attrs=attribute)[0].text
。
您的方法不会将self
作为第一个参数。因此在该上下文中找不到self
。设为_find_details(self, detail)
- 然后就可以了。