我想知道是否可以在与以下代码相同的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
答案 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
请注意,允许出现不一致的类通常是一个坏主意-克服了隐含的类的不变式。您应该始终将属性初始化为有意义的值。