【问题标题】:Defining instance variables using functions and instance methods in __init__使用 __init__ 中的函数和实例方法定义实例变量
【发布时间】:2016-07-10 16:14:38
【问题描述】:

我将以下类定义为:

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__ 方法调用实例方法的问题:

但我无法解决这个问题。

【问题讨论】:

  • 请发布完整的堆栈跟踪
  • @masnun 添加了它。感谢您的建议:)
  • 堆栈跟踪中的行在您的代码 sn-p 中不可用。是否可以发布完整代码?
  • @masnun 也添加了它们
  • 在您的堆栈跟踪中,我看到了这个 /home/user.py in _find_details(detail) - 您的代码中的 _find_details(detail) 方法在哪里?

标签: python oop instance


【解决方案1】:

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

您的方法没有将self 作为第一个参数。所以它在那种情况下找不到self。让它_find_details(self, detail) - 然后它应该工作。

【讨论】:

  • 虽然您的回答并没有帮助我解决我的问题,但由于您的勤奋,我接受了它,并且在技术上是正确的。 :)
猜你喜欢
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 2011-08-27
  • 2014-03-06
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多