【问题标题】:Trouble accessing function of inner class in Python无法在 Python 中访问内部类的函数
【发布时间】:2019-08-04 15:23:01
【问题描述】:

我是python的新手 我正在学习如何使用内部/嵌套类。 我写了下面的代码。 我无法访问display()

class Person:
    def __init__(self,name):
        self.name=name
        self.dob=self.DOB
    class DOB:
        def __init__(self,dd,mm,yyyy):
            self.dd=dd
            self.mm=mm
            self.yyyy=yyyy
        def display(self):
            return(self.dd)

p=Person('Surya')
p.DOB(11,22,3333)
p.DOB.display()

【问题讨论】:

  • 你得到什么错误?
  • 通过使用p.DOB(11,22,3333),您构造了一个DOB 对象,但随后您将该对象扔掉了。所以display(..)确实会出错。
  • 不是迂腐,而是一个“类的功能”(内部或非内部)被称为方法。

标签: python inner-classes


【解决方案1】:

由于您的display 函数在一个类中,您需要在尝试使用它之前初始化该类。您确实初始化了该类,但您没有将此对象保存在任何地方。

将最后几行更改为:

p = Person('Surya')
pDOB = p.DOB(11,22,3333)
print(pDOB.display())

【讨论】:

  • @piedotpy 没问题!如果您的问题已解决,请将答案标记为正确。
【解决方案2】:

您的p.DOB 将构造一个新的DOB 对象,但随后您将该对象丢弃,因为您没有将该对象存储在变量中等。例如,您可以使用变量来存储返回的@987654323 @对象,比如:

p = Person('Surya')
dob = p.DOB(11,22,3333)
dob.display()  # will return 11

通过使用p.DOB,您将获得对内部DOB 类的引用,如果您随后调用.display(),则意味着没有self 参数,因此会出现错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2016-08-04
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多