【问题标题】:Python Error: Cannot access function in classPython 错误:无法访问类中的函数
【发布时间】:2014-07-17 21:20:09
【问题描述】:

我最近开始使用 python 并且完全感到困惑。

我有以下课程:

class Vault:

  def __init__(self):

    # used to mock collection (table) of ads
    self._ads = [ {
        'id': '00000000-0000-0000-0000-000000000000',
        'date': str(datetime.now().strftime('%Y%m%d')),
      'time': str(datetime.now().strftime('%H%M%S')),
        'source': 'chron.com',
        'advertiser': 'itunes.apple.com',
        'width': 300,
        'height': 250
    } ]
  def get_ad_by_d(self, d):
    myDate = getTodayDate()
    ads = [ ad for ad in self._ads if ad['date'] == d ]
    if len(ads) == 0:
      return None
    elif len(ads) >= 1:
      return ads[0]
  def getTodayDate():
    return str(datetime.now().strftime('%Y%m%d'))

但是当我调用它时,我收到以下错误:

NameError:未定义全局名称“getTodayDate”

为什么我不能访问同一个类中的另一个函数?我在 textMate 中编写了这段代码,但是在 Eclipse 中访问同一类中的相邻函数时我从来没有遇到过问题。我错过了什么吗?

  def getTodayDate(self):
    return str(datetime.now().strftime('%Y%m%d'))
  def getTodayTime(self):
    return str(datetime.now().strftime('%H%M%S'))

可以解决上述问题,但在 init 中实施失败(感谢答案):

  def __init__(self):
    myDate = getTodayDate()
    myTime = getTodayTime()
    # used to mock collection (table) of ads
    self._ads = [ {
        'id': '00000000-0000-0000-0000-000000000000',
        'date': myDate,
      'time': myTime,
        'source': 'chron.com',
        'advertiser': 'itunes.apple.com',
        'width': 300,
        'height': 250
    } ]

我有一个类似的错误没有通过添加self来解决:

File "/Users/tai/Desktop/FlashY/flashy/repository/mock.py", line 10, in __init__
    myDate = getTodayDate()
NameError: global name 'getTodayDate' is not defined

cmets 中的解决方案:

  def __init__(self):
    myDate = self.getTodayDate()
    myTime = self.getTodayTime()
    # used to mock collection (table) of ads
    self._ads = [ {
        'id': '00000000-0000-0000-0000-000000000000',
        'date': myDate,
      'time': myTime,
        'source': 'chron.com',
        'advertiser': 'itunes.apple.com',
        'width': 300,
        'height': 250
    } ]

【问题讨论】:

    标签: python function syntax


    【解决方案1】:

    在您的方法中使用self def getTodayDate(self):myDate = self.getTodayDate()

    【讨论】:

    • 哦,有趣。为什么过去我不需要自我?是因为我需要使用 self 来匹配的功能吗?你能解释一下 self 在 python 中是如何工作的吗?
    • Python 中每个不是@classmethod@staticmethod 的类的方法都会作为第一个参数传递对该类实例的引用。你可以随心所欲地调用这个变量,惯例是总是调用它self
    • @TaiHirabayashi,这里有详尽的解释stackoverflow.com/questions/2709821/python-self-explained
    • awesome :) 我主要是 Java,以前从未遇到过这个问题。再次感谢
    • 实际上我看到了同样的问题。它适用于我在 get_ad_by_d 中的调用。但是,如果我这样做: def __init__(self): myDate = getTodayDate() 它具有相同的错误:未定义全局名称'getTodayDate'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2017-06-20
    • 2017-06-06
    相关资源
    最近更新 更多