[英]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]
與user
和user_api
相同。
另一方面,如果您不打算在該方法之外使用這些變量,則不需要config_file
或log_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.