- 论坛徽章:
- 0
|
单独的python程序文件如何使用getattr(obj,attribute)类似的方法去改变全局变量?
最近在写一个小工具程序只有一个程序文件 ,要完成这样一个工作,
举例说明:
两个全量变量
FundType[]
SourceType[]
一个文本文件内容为
1,FundType
2,SourceType
3,FundType
4,SourceType
目标是根据文本文件第二栏的名字设置对应全局变量的值
>>>FundType
['1','3']
>>>SourceType
['2','4']
当然用很多个if - else是可以完成的,但是PHP,perl都有通过字符串去访问同名变量的方法
而且如果obj是对象或模块python中可以用getattr(obj,attribute)的方法去访问obj.attribute
对于本文件的全局变量我却不知道如何处理,另制作一个模块再导入不作为一个解决方法
请教了
谢谢
附:下面是我找到的一个类似问题的解决方法但实在是太 ugly !
网址:http://quke.cn/log-208.html
#######################################################################################
在python如何获得自身模块的引用
在python中有个getattr和函数,非常强大,可以用字符串的形式获得一个模块中属性,函数的引用
或者叫句柄;但有个小疑问就是无法直接获得当前模块的一个属性或函数,我曾苦苦的找寻了一段时
间我以为用self之类的简单的内置的属性或之类的东西来作为自身模块的引用,但不幸的是一直没找
到,可能没有这种东西。
最后解决的方式就是在当前模块中引入自己,用from import方式来引入似乎让人感觉不太正常,
为什么要在自身中在引入自己呢?实在没办法就退而求其次,在用到的地方在动态的引入吧。
最后的解决方式就是使用__import__('模块路径')来引入自己。代码如下:
#包名:lib.templatetags
#模块名:tags.py
class temClass(object):
__init__(self):
pass def main():
selfMod = __import__('lib.templatetags.tags')
getattr(selfMod.templatetags.tags, temClass)
其中selfMod = __import__('lib.templatetags.tags') 执行完得到是lib的引用,
但是如果selfMod = __import__('lib')得到就是包含了更过的引用,
这些是我不需要的,不能因此增加服务器的负担。
代码中是获得属性的例子,设置或删除属性的例子同理。
####################################################################################### |
|