簡體   English   中英

在python中訪問函數內部的類變量

[英]access class variables inside a function in python

我試圖從一個類的python中的config file中讀取一些值,然后試圖在同一類的另一個函數中訪問這些變量。 我嘗試了下面的代碼,但是我的代碼似乎有問題。 這是我嘗試過的:

class CLEAN():
    def __init__(self):
        parser = argparse.ArgumentParser(description='Remove inactive users from artifactory')
        parser.add_argument('-f', '--config_file', dest='config_file', default="", required=True, action="store", help='the config file with creds')
        parser.add_argument('-d', '--log_dir', dest='log_dir', default="", required=True, action="store", help='the logs dir')
        parsers = parser.parse_args()

        self.config_file = parsers.config_file.strip()
        self.log_dir = parsers.log_dir.strip()

        if not os.path.exists(self.log_dir):
            os.mkdir(self.log_dir)

        with open('config.ini', 'r') as myfile:
            for line in myfile:
                if 'instance' in line:
                     instance = line.split('=')[1]
                if 'user' in line:
                    user = line.split('=')[1]
                if 'user_api' in line:
                     user_api = line.split('=')[1]

    def print_values(self):
        logger.info(self.instance)
        logger.info(self.user)
        logger.info(self.user_api)`

這部分代碼后面是main()我得到的錯誤是

Traceback (most recent call last):
 File "clean.py", line 48, in <module>
    c.main()
  File "clean.py", line 44, in main
    self.print_values()
  File "clean.py", line 39, in print_values
   logger.info(self.instance)
AttributeError: CLEAN instance has no attribute 
'instance'


cat config.ini
instance=xxxxx
user=abc
user_api=xxxx

您需要添加self.

self.instance = line.split('=')[1]

useruser_api相同。

另一方面,如果您不打算在該方法之外使用這些變量,則不需要config_filelog_dir self

正如bruno所說,使用ConfigParser:

from configparser import ConfigParser

config = ConfigParser()
config.read('config.ini')
print(config['section']['instance'])  # xxxxx

這需要在配置文件的頂部添加一行[section] 任何標題都可以,但是必須有節標題。

然后,您可以self.config = config['section']並以self.config['instance']訪問這些值。

這里:

     with open('config.ini', 'r') as myfile:
        for line in myfile:
            if 'instance' in line:
                 instance = line.split('=')[1]
            if 'user' in line:
                user = line.split('=')[1]
            if 'user_api' in line:
                 user_api = line.split('=')[1]

您正在創建局部變量,而不是實例屬性。 您必須改為分配self.instance ,self.user and self.user_api`。

另外,在當前代碼中,將不保證將設置這些屬性(如果在文件中未找到“ user”,“ user_api”或“ instance”字樣),因此您需要首先將這些屬性設置為默認值,即:

     # which default value makes sense is up to you
     self.instance = None
     self.user = None
     self.user_api = None

     with open('config.ini', 'r') as myfile:
        for line in myfile:
            if 'instance' in line:
                 self.instance = line.split('=')[1]
            if 'user' in line:
                self.user = line.split('=')[1]
            if 'user_api' in line:
                 self.user_api = line.split('=')[1]

另外, python有一個ConfigParser該類知道如何處理ini文件,因此使用它可能會更好。

暫無
暫無

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

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