簡體   English   中英

從另一個 class 方法更改實例屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM