簡體   English   中英

Python 為導入模塊中的屬性分配本地值

[英]Python assign local value to attribute in imported module

在 Script1 中,我定義了 class1。

要啟動 class1,您只需要一個變量 x,但它具有啟動 class 不需要的其他屬性y 當我運行腳本 1 時,它將值 10 分配給在if __name__ == __main__:行之后聲明的 y。

######Script1#########
Class class1:
    def __init__(self,x):
        self.x = x
        self.y = y
if __name__ == '__main__':
    y = 10
    class_instance = class1(100)
    print(class_instance.y) #prints 10 or assigns 10 to class.y

在 script2 我導入 class1 並嘗試為y賦值,但它給了我NameError 我嘗試在 class1 中將 y 聲明為 global,以及其他一些東西,但它不起作用。 我知道它與命名空間和范圍有關 - 任何指向正確方向的指針都會有很大幫助。 謝謝。

#### script2 ######
from script1 import *
if __name__ == '__main__':
    y = 10
    class_instance = class1(200)
    print(class_instance.y) #gives NameError
NameError: name 'y' is not defined

你想要的是一個可選的keyword argumenthttps://docs.python.org/3/tutorial/controlflow.html#keyword-arguments ):

Class class1:
    def __init__(self,x, y=10):
        self.x = x
        self.y = y
if __name__ == '__main__':
    class_instance = class1(100)
    print(class_instance.y)              #prints 10 

    instance2 = class1(100,200)
    print(instance2.y)                   #prints 200 

    instance3 = class1(100,y=300)
    print(instance3.y)                   #prints 300 

如果您願意,這將允許您提供y值。 如果您不提供y值,它將使用默認值10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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