是否可以在同一类中的另一个方法中访问变量?

时间:2018-11-18 17:06:34

标签: python-2.7

我想知道是否可以在与以下代码相同的function1类中将function2中定义的变量访问到MainWindow中?
如何从另一个类访问另一个方法中的变量?

import os

class MainWindow():

    def __init__(self, name):

        self.name = name

    def function1(self):

        if self.work != []:
             self.variable = self.existing_work.variable

    def function2(self):

        if not os.path.isdir(self.variable):

            return False

        else:

          return True

2 个答案:

答案 0 :(得分:0)

您可以使用任何其他方法来访问您在self.variable中创建的任何属性,就像在访问该属性之前创建该属性self.name一样。

在您的示例中,function1必须在function2之前运行,否则它将失败。

答案 1 :(得分:0)

Python没有访问限制-在方法中使用self.attr与在外部使用instance.attr相同。这样,您就可以自由设置和获取方法和外部代码中的属性。

例如,您可以拥有一个在__init__中没有定义属性的类:

class Dummy(object):
     def set_name(self, value):
         self.name = value

     def get_name(self):
         return self.name

除非设置属性,否则类是不一致的,但是它仍然有效:

instance = Dummy()  # works
print(instance.name)  # AttributeError: 'Dummy' object has no attribute 'name'
print(instance.get_name())  # AttributeError: 'Dummy' object has no attribute 'name'

# we can set name to make instance consistent
instance.set_name('Setter')  # works
# internal access via method
print(instance.get_name())  # Setter
# external access via attribute
print(instance.name)  # Setter

instance.name = 'External'
print(instance.name)  # External
print(instance.get_name())  # External

请注意,允许出现不一致的类通常是一个坏主意-克服了隐含的类的不变式。您应该始终将属性初始化为有意义的值。