[英]Changing instance attribute from another class method
是否可以在不使用全局變量的情況下做到這一點? 這被認為是一種良好的編碼實踐還是我應該避免它?
class ClassA:
def __init__(self, array):
self.array = array
def method_a(self, scale):
self.array = list(map(lambda x: x * scale, self.array))
class ClassB:
def __init__(self):
pass
def method_b(self):
'''it throws an error when im not using global variable defined in main:'''
if len(instance_a.array) > 5:
instance_a.method_a(10)
def main():
global instance_a
array_ = [1,2,3,3,6,5]
instance_a = ClassA(array_)
instance_b = ClassB()
instance_b.method_b()
編輯:剛剛分配了array_
您可以將本地實例作為參數傳遞給method_b
,而不是將instance_a
聲明為全局實例。 一般來說,應避免使用全局變量,因為變量的 scope 越窄,在需要時越容易調試。
例子:
class ClassA:
def __init__(self, array):
self.array = array
def method_a(self, scale):
self.array *= scale
class ClassB:
def __init__(self):
pass
def method_b(self, instance_a):
if len(instance_a.array) > 5:
instance_a.method_a(10)
def main():
instance_a = ClassA(array_)
instance_b = ClassB()
instance_b.method_b(instance_a)
你永遠不需要這樣做。 此外,我看不到 array_ 的定義位置,這應該引發 UnboundLocalError。 無論如何,你永遠不會生產這樣表達的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.