Is there a way to set variables at runtime in python

时间:2019-01-15 18:24:35

标签: python

I am trying to set/unset some of the debug flags while my code is running. Below is the snippet of the function

class ABC:
    def __init__(self,debugFlag):
        self.debugFlag = False
    def some_function()
        if self.debugFlag is True:
            print "Some debug logs"

Above is the code snippet. I want to set this debugFlag while my program is running and depends on the situation want to set/unset its value. Based on the current value of debugFlag it should print debug logs or not

How to do this in python

Explaining my problem again : Suppose I am having a script that takes 60 mins to run. I executed the script with debugFlag False. After 15 mins, I want to enable the debug logs. How can I do this without interrupting my execution.

6 个答案:

答案 0 :(得分:0)

怎么样:

no such table: comentario

答案 1 :(得分:0)

是的,您可以更改self.debugFlag的值,是的。

request

答案 2 :(得分:0)

稍加修改您的班级:

class ABC:
    def __init__(self,debugFlag):
        self.debugFlag = debugFlag # or omit that arg and always false
    def some_function(self): # Need self 
        if self.debugFlag:
            print "Some debug logs"
    def condition_setter(self):
        # Do some checks here then set debugflag to False
        self.debugFlag = False

创建对象后,您将能够更改其属性,例如:

class ABC:
    def __init__(self,debugFlag=False):
        self.debugFlag = debugFlag    # initialize the flag here or use default
    def some_function()
        if self.debugFlag is True:
            print "Some debug logs"

答案 3 :(得分:0)

一种实现此目的的方法是在模块的根目录中声明var,并在设置和引用时在同一范围内导入/引用它们。

想象一下您的模块的目录结构

my_module/
- __init__.py
- another_module.py
- utils/
  - __init__.py
  - and_so_on.py

在my_module / __ init__.py中声明您的__debug__变量

__debug__ = False

在您的示例代码中

import my_module
class ABC:
    def __init__(self):
      pass
    def some_function()
        if my_module.__debug__ is True:
            print "Some debug logs"

然后,在实际执行代码之前,将调试标志设置为False,以相同的方式导入和引用

import my_module
my_module.__debug__ = True

只要您导入并引用相同的IE,就可以引用该变量:

import my_module
if my_module.__debug__ is True:
   print("IN DEBUG")

它将在整个执行过程中保持其价值

答案 4 :(得分:0)

尝试这样的事情:

class ABC():
     def __init__(self, debugFlag):
          self.debugFlag = debugFlag

     def some_function(self):
         if self.debugFlag:
               print('Debug on\n')
         else:
               print('Debug off\n')


abc_object = ABC(False)

def check_choice():
  if str(choice) == '1':
     abc_object.debugFlag = True
     abc_object.some_function()

  elif str(choice) == '2':
     abc_object.debugFlag = False
     abc_object.some_function()
  else :
     print('Invalid input')

while True:
    choice = input('Type 1 to enable debugging, 2 to disable debuigging : ')
    check_choice()

摘要:

初始化类时,它需要1个强制性参数debugFlag,即True或False。

在类中定义函数时,应使用“ self”自变量。 Explanation as to of why this is

“如果self.debugFlag”与“ self.debugFlag为True”相同,则应使用前者,因为它更为简洁。

我们实例化一个ABC实例并将其存储在变量abc_object中。我们为它传递了debugFlag的默认值,在这种情况下为False。

然后,我们引入一些逻辑来检查debugFlag的状态,然后根据逻辑结果执行一些功能。

希望这会有所帮助。让我知道是否需要进一步说明。

答案 5 :(得分:0)

我不认为您可以直接从变量执行此操作,但是您可以例如创建一个文件(例如,debug.txt)并检查是否存在用于触发的文件。例如,创建一个名为debug.txt的空文件,然后在脚本中检查该文件是否存在。

未经测试的代码:

import os

class ABC:
    def __init__(self,debugFlag):
        self.debugFlag = False
    def some_function()
        if os.path.exists("debug.txt"):
            print "Some debug logs"

通过这种方式,您可以通过创建/删除文件“ debug.txt”来触发/触发调试。