簡體   English   中英

導入模塊、函數、實例

[英]Importing Module, Function, Instance

我一直在運行一些測試來學習導入的工作原理:

文件 1:

class Player():

    hp=0

    def __init__(self):
        self.hp=0

    zim = Player()
    zim.hp = 5

文件2:

import test1

print(test1.zim.hp)

我運行 file2: 並得到 5 的輸出。(勝利的波浪旗)

Soooo,然后我將 file1 更改為:

def Test():
    class Player():
        hp=0

        def __init__(self):
            self.hp=0

    zim = Player()
    zim.hp = 5

我一直在嘗試修改 file2 中的代碼以獲得 5 的輸出,但它失敗了。 有沒有辦法導入一個函數然后實例化特定的數據(在這個例子中是 hp)? 我知道“返回”,但想知道是否有辦法修改以下代碼以直接導入我需要的實例。

即:abc 將是......?

import test1

print(abc.test1.zim.hp) 

~T

要回答您的問題“我想知道是否可以修改以下代碼以直接導入我需要的實例”:否。

正如你不能進入一個函數並在一個模塊中獲取它的內部工作一樣,你也不能在導入中這樣做。

該函數定義了Player是什么,實例化了它,並調用了它的一個屬性。 然后函數結束,程序不知道Player是什么,更不用說zim是什么,它的hp屬性是什么!

在您的test1您有:

class Player():
    hp=0
    def __init__(self):
        self.hp=0
    zim = Player()
    zim.hp = 5

這將拋出NameError: name 'Player' is not defined因為您正在創建Player的實例,而它的類定義尚未結束。 我認為你打算這樣做:

class Player():
    hp=0
    def __init__(self):
        self.hp=0
zim = Player()    # This and the next line are indented differently
zim.hp = 5

在這種情況下zim成為test1的模塊變量,因此可以從test2打印zim.hp

現在,在您將test1編輯為:

def Test():
    class Player():
        hp=0

        def __init__(self):
            self.hp=0

    zim = Player()
    zim.hp = 5

Player對象實例化在它的類聲明之外,所以它是正確的。 但是變量zim只存在於函數Test() 當您從另一個模塊打印zim.hpzim不作為要從test2訪問的模塊變量存在。

也許你可以從Test()方法return zim.hp 如果你這樣做,你可以從test2訪問值作為print(test1.Test())

希望這可以幫助。

暫無
暫無

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

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