我有一个Python模块文件,它实际上是一个具有相关联的公共和私有函数的类。我想在类和所有函数中使用日志模块。但问题是如果我只在__init__()
内导入一次,则在其余的功能。Do我必须在类的每个函数中导入它?在
在类中导入此类模块的最佳方法是什么。我在stackoveflow论坛上搜索了关于这个问题的各种讨论,但没有找到具体的东西。在
下面是我的示例类:
class Add:
def __init__(self,no1,no2):
import logging
logging.basicConfig(filename='example2.log',level=logging.INFO)
logging.info("The two parameters passed are {0} and {1}:".format(no1,no2))
self.num1 = no1
self.num2 = no2
def add(self):
logging.debug("Inside add function of Add class")
logging.info("Adding the two class properties")
self.result = self.num1 + self.num2
logging.debug("Exiting add function")
def display(self):
logging.debug("Inside display class")
return self.result
if __name__ == '__main__':
a = Add(10,11)
a.add()
print (a.display)
当我试着运行这个程序时:
^{pr2}$
您可以简单地将其分配给一个变量:
但我建议只在模块级别导入它。将模块附加到类的成员变量上感觉非常错误。在
另一个选择是只存储要使用的记录器:
^{pr2}$PS:这可能不是为类创建记录器的正确方法,我从来没有这样做过,只是在这里即兴创作的。仔细阅读如何做这件事。
所以这里的问题是范围问题。在函数内部导入时(有时有时,请参见下文),则该导入的范围仅限于该函数内部:
相反,您应该尝试始终在顶部导入:
^{pr2}$你还应该想出一个好的,可维护的方法来订购你的进口产品。在
现在,你可以在一个函数内部完成它,你可以做一些有趣的事情,比如动态导入和反射,以及各种很酷的事情,但是99.9%的时间你不需要,所以增加这种复杂性会降低可维护性(这应该是你的目标)。在
最好的时机是解决复杂的循环导入,或者如果您正尝试使用动态加载来提高性能。但是当谈到优化性能时,你应该总是先构建它,然后再看看它哪里出了问题。在
相关问题 更多 >
编程相关推荐