【问题标题】:How to use a variable that inside of a function of a class in another class - Python如何在另一个类中使用一个类的函数内部的变量 - Python
【发布时间】:2017-06-16 07:27:53
【问题描述】:

我试图访问函数内部的另一个变量,也来自另一个类,所以我用这种方式编码

class Helloworld:

   def printHello(self):
       self.hello = 'Hello World'
       print (self.hello)


class Helloworld2(Helloworld):
    def printHello2(self)
       print(self.hello)

b = Helloworld2()
b.printHello2()

a = Helloworld()
a.printHello()

但是,这给了我这个错误:AttributeError: 'Helloworld2' object has no attribute 'hello'。那么,访问该变量的最简单方法是什么?

【问题讨论】:

  • 请正确缩进你的代码,理解它很重要。
  • self.hello 仅在您执行printHello 时设置。如果您不调用该方法 self.hello 不存在。在Helloworld2 的情况下,永远不会调用该方法。您可能希望将其移至 __init__,以便在实例化类时设置该属性。

标签: python python-3.x class oop


【解决方案1】:

那是因为您从不调用 printHello(self) 来声明您的 self.hello。

要让它发挥作用,你需要做:

class Helloworld2(Helloworld):
    def printHello2(self):
        super().printHello()
        print(self.hello)

或者将你 self.hello 的声明移动到__init__(),这将是更优选的方式。

【讨论】:

    【解决方案2】:

    你应该通过__init__()函数初始化类的实例,这意味着当它被创建时,这些值被设置。

    这会让你的代码看起来像:

    class Helloworld:
        def __init__(self):
            #sets self.hello on creation of object
            self.hello = 'Hello World'
    
        def printHello(self):
            print (self.hello)
    
    
    class Helloworld2(Helloworld):
        def printHello2(self):
           print(self.hello)
    
    b = Helloworld2()
    b.printHello2()
    
    a = Helloworld()
    a.printHello()
    

    另一种方法是使用您当前的代码调用printHello(),可以在顶层使用b.printHello(),也可以在printHello2 内调用。请注意,在这种情况下,您实际上不需要使用 super().printHello(),因为您没有在 Helloworld2 中重新定义该函数,但如果您这样做了,它将是必需的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多