【问题标题】:How do I access a variable inside a class method from outside it?如何从外部访问类方法内部的变量?
【发布时间】:2017-09-21 12:59:53
【问题描述】:

这是我抛出 AttributeError 的代码。如何访问abc 变量并将其打印出来?

出于某种原因,我不希望 foo 类返回 "ABC"。是的,我知道我可以做到,但我正在寻找不同的解决方案。感谢您的帮助。

class John:   
    def foo(self):
        abc = "ABC"

a = John()
print(a.foo.abc)

【问题讨论】:

    标签: python class variables methods


    【解决方案1】:

    您必须将类John 中的变量定义为类的属性。像这样:

    class John:
        def __init__(self):  # You have to have this initialization method, which is called when you do 'John()'
            self.foo()
        def foo(self):
            self.abc = "ABC"  # Note the use of 'self.'
    
    a = John()
    print(a.abc)  # abc is an attribute of 'John', no need to pass through 'foo'
    

    编辑

    __init__() 在您创建类的实例a = John() 时执行。在__init__() 中,你可以做任何你会在类的函数中做的事情。您可以在现场创建属性(在属性名称前使用self.)或调用函数或类方法(在本例中,我们称为foo 方法,with self.)。因此,在这一行:

    a = John()
    

    您正在创建类John 的实例,将其分配给a,并执行John.__init__(),后者执行John.foo(),从而创建属性John.abc

    【讨论】:

    • AttributeError: 'John' 对象没有属性 'abc'
    • 添加了简要说明。正如@offeltoffel 所说,您可以在 init 方法上在那里创建属性,而不是调用除此之外什么都不做的函数。
    • 如果有效,请考虑将答案标记为正确:)
    【解决方案2】:

    您正在寻找__init__ 函数。

    class John:   
        def __init__(self):
            self.abc = "ABC"
    
    a = John()
    print(a.abc)
    

    init 函数会在您创建该类的新实例后立即调用。因此,一旦 John 类获得一个新实例(“a”),它就会附加变量“abs”。

    在您的类中,您可以使用self.abc 来处理abc 变量,在外部您可以将self 替换为您的实例名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2011-06-08
      相关资源
      最近更新 更多