Python 3.x 如何访问类中子函数的变量?

Python 3.x 如何访问类中子函数的变量?,python-3.x,python-3.7,Python 3.x,Python 3.7,我在子函数外部调用变量时遇到问题: class ABC(): def ___init___(self): function_A() function_B() def function_A(self): self.A = 5 def subfunction_of_A(self): self.B = 2 self.function_B() subfuncti

我在子函数外部调用变量时遇到问题:

class ABC():
    def ___init___(self):
        function_A()
        function_B()
    def function_A(self):
        self.A = 5
        def subfunction_of_A(self):
            self.B = 2
            self.function_B()
        subfunction_of_A()
    def function_B(self):
        C = self.B

 Start = ABC()
我总是犯错误:
'ABC'对象没有
C=self.B的属性“B”

我怎样才能从外面进入self.B

非常感谢:)

-------编辑/更新---------- 好的,我想我可能需要更新一下我的问题:

class ABC():
    def ___init___(self):
        self.function_A()
        self.function_B()
    def function_A(self):
        self.A = 5
        def subfunction_of_A(self):
            self.B = 2
        subfunction_of_A(self)
        print(self.B) # This prints 2 and works as it should!
    def function_B(self):
        C = self.B # In this line I receive the error that ABC.B does not exist --> Why is that?

 Start = ABC()
编辑:

class ABC():
定义初始化(自):
self.function_A()
self.function_B()
def功能_A(自身):
self.A=5
def子功能_of_A(自身):
self.B=2
_A的子功能_(self)
def功能(自身):
打印(self.B)#此功能打印2个,并正常工作!
C=自我。B
Start=ABC()
这一次您的问题似乎是您的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>有3个下划线,而不是2个<代码>\uuuu初始化\uuuuu

先前的答复:

你永远不会调用你的“子函数”

设置B的唯一方法是让该函数运行,即使它是嵌套的…这是一种奇怪的设置类的方法,但您可以编辑:

class ABC():
定义初始化(自):
self.function_A()
self.function_B()
def功能_A(自身):
self.A=5
def子功能_of_A(自身):
self.B=2
_A的子功能_(self)
def功能(自身):
打印(self.B)#此功能打印2个,并正常工作!
C=自我。B
Start=ABC()
这一次您的问题似乎是您的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>有3个下划线,而不是2个<代码>\uuuu初始化\uuuuu

先前的答复:

你永远不会调用你的“子函数”


设置B的唯一方法是让该函数运行,即使它是嵌套的…这是一种奇怪的设置类的方法,但现在你可以开始了

我猜你是指实例属性?如中所示,如果您为
ABC
类创建一个新的
实例,例如,像这样
ABC=ABC()
您无法访问属性?我对Python非常陌生,但我认为问题在于您没有在类的顶层声明属性a或B,然后就拥有了您的函数和子函数(我必须承认,子函数的想法对我来说也很奇怪)修改这些属性。@mapf:是的,这就是问题的一部分。我想你是在引用实例属性?比如,如果你为
ABC
类创建一个新的
instance
,比如这样的
ABC=ABC()
您无法访问属性?我对Python非常陌生,但我认为问题在于,您没有在类的顶层声明属性A或B,然后才有您的函数和子函数(我必须承认,子函数的概念对我来说也很奇怪)修改这些属性。@mapf:是的,这是一个问题。谢谢。我刚刚编辑了我的问题。实际上我调用了函数本身的“子函数”。这些函数是从类的init调用的。你有什么线索吗?你必须将self传递给“子函数”为了使其影响当前对象,请注意我如何将其称为_A(self)的
子函数
我再次编辑了我的问题-我仍然不明白为什么我不能访问它?!我编辑了你当前代码的答案…如果它仍然不起作用,你显然没有发布你的实际代码,我无法告诉你它有什么问题谢谢。我刚刚编辑了我的问题。实际上我调用了“子函数”在函数本身中。函数是从类的init调用的。你有什么线索吗?你必须将self传递给“sub function”,它才能影响当前对象-注意我如何将其称为A(self)的subfunction
我再次编辑了我的问题-我仍然不明白为什么我不能访问它?!我编辑了你当前代码的答案…如果它仍然不起作用,你显然没有发布你的实际代码,我无法告诉你它出了什么问题
class ABC():
    def function_A(self):
        self.A = 5
        def subfunction_of_A(self):
            self.B = 2
        subfunction_of_A(self) # notice this line

    def function_B(self):
        self.C = self.B


abc = ABC()
abc.function_A()
abc.function_B()
print(abc.C) # prints 2