在abseil文档中有一个声明如下:
当一个 Python 模块导入另一个模块时,它可以访问另一个模块的标志。(此行为是通过让所有模块共享一个包含所有标志信息的通用全局注册表对象来实现的。)
当一个模块导入另一个模块时——获得对另一个标志的访问权——是否反过来呢?换句话说,正在导入的模型是否也可以访问导入模型的标志?就行为而言,情况似乎如此。一般规则是否应该是任何两个具有某种导入连接的python文件都可以访问彼此的标志,并且这个条件是传递的?
以下是三个文件,它们演示了我所指的行为。
示例.py
from absl import app
from absl import flags
import sample2
FLAGS = flags.FLAGS
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
def main(argv):
print(FLAGS.name, "is being called in sample.py.")
print(FLAGS.Flag2) #Flag2 is a flag of sample3.py.
sample2.Sample()
if __name__ == '__main__':
app.run(main)
样品2.py:
from absl import app
from absl import flags
import sample3
FLAGS = flags.FLAGS
flags.DEFINE_string('Flag1', 'Jane Random', 'Your name.')
class Sample:
def a_method(self):
print(FLAGS.name, "is being called in sample2.py.") #sample.py's flags appear to be accessible even though we're not importing from there.
def __init__(self):
self.a_method()
sample3.Sample()
样本3.py
from absl import app
from absl import flags
FLAGS = flags.FLAGS
flags.DEFINE_string('Flag2', 'This is a sample3.py flag.')
class Sample:
def a_method(self):
print(FLAGS.name, "is being called in sample3.py.") #sample.py's flags appear to be accessible even though we're not importing from there.
def __init__(self):
self.a_method()