我有一個具有很長變量列表(至少一打)的類。在模塊中,我首先導入一個包含一些輔助方法和所有默認常量的常量文件。Python在初始化文件和默認常量文件中使用變量初始化類
from myConstants import *
class SomeClass(ParentClass):
def __init__(var1=VAR1, ..., varN=VARN):
super(SomeClass, self).init(var1, ...)
self.varM = varM
問題:我希望能夠指定一個文件時,我初始化該文件中包含的常量在myConstants.py
一個子集類。不在init文件中的變量將從默認值加載。喜歡的東西:
sc = SomeClass(initFile='/path/to/file')
我的想法是有東西像
from myConstants import *
from ConfigParser import SafeConfigParser
class SomeClass(ParentClass):
def __init__(var1=VAR1, ..., varN=VARN, initFile=''):
if initFile:
parser = SafeConfigParser().read(initFile)
var1 = parser('constants', 'var1') if parser('constants', 'var1') else VAR1
var2 = parser('constants', 'var2') if parser('constants', 'var2') else VAR2
....
varN = parser('constants', 'varN') if parser('constants', 'varN') else VARN
else:
var1 = VAR1
...
varN = VARN
super(SomeClass, self).init(var1, ...)
self.varM = varM
問題:這是做到這一點的最好方法是什麼?如果不是,那是什麼?似乎有點囉嗦。我也沒有和ConfigParser結婚。
提示:不要使用「通配符導入」,例如'from foo import *',要麼顯式地執行'from foo import bar1,bar2,bar3,...'或者'import foo'並執行'foo。 bar1,foo.bar2' – cowlicks
我可以問爲什麼不呢?該文件包含很多變量/方法,大部分都在使用。顯式導入將會超長。加上任何時候添加新的常量,我將不得不進入並更改每個模塊文件。 – Sal
所以你應該做第二個cowlicks的建議;只要做'import foo',然後將它們稱爲'foo.bar1'等等 - 當你添加新的時候不需要改變任何東西。 –