在python中访问函数内部的类变量

时间:2019-01-24 08:53:18

标签: 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

2 个答案:

答案 0 :(得分:2)

您需要添加self.

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

useruser_api相同。

另一方面,如果您不打算在该方法之外使用这些变量,则selfconfig_file不需要log_dir

正如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']的形式访问这些值。

答案 1 :(得分:0)

这里:

     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.user self.instance self.user_api`分配给and

此外,在您当前的代码中,没有保证将设置这些属性(如果在文件中未找到“ 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 has a ConfigParser class知道如何处理ini文件,因此最好使用此文件。