我正在尝试编写我的第一个python模块。该模块是api的包装器。
我想允许用户以两种方式之一设置api密钥:使用静态配置文件,或者在启动类时动态设置。
如果密钥实际上是动态设置的,如何将密钥从__init__.py
传递给functions.py
?
文件结构:
package/
__init__.py
config.py
functions.py
文件内容:
__初始化__。PY
import config
class MyClass(object):
def __init__(self, key):
self.key = key if key else config.key
...
functions.py
import config
class MyFunctions(object):
def __init__(self):
self.key = ?
self.base_url = config.base
def function1(self, my_id):
endpoint = urlencode({'id':my_id, 'key':self.key})
...
config.py
key = 'xxxxxxxxxxx'
base= 'http://xxxxx.com/api'
答案 0 :(得分:0)
假设您要为functions
模块中的所有类设置相同的密钥,请在包的初始化中执行此操作,覆盖config
模块中默认设置的变量。
然后导入config
模块并使用变量
<强> config.py 强>
key = 1
base_url = 'www.xyz.com/'
<强> __初始化__。PY 强>
import config
import functions
class MyClass(object):
def __init__(self, key=config.key):
config.key = key
<强> functions.py 强>
import config
class MyFunctionsA(object):
def function1(self, my_id):
print(config.base_url)
print(config.key)
class MyFunctionsB(object):
def function1(self, my_id):
print(config.base_url)
print(config.key)
class MyFunctionsC(object):
def function1(self, my_id):
print(config.base_url)
print(config.key)
所以你可以将它们用作
>>> import package as pk
>>> pk.MyClass(9)
<package.MyClass object at 0x7f2133e96d10>
>>> f1 = pk.functions.MyFunctionsA()
>>> f2 = pk.functions.MyFunctionsB()
>>> f3 = pk.functions.MyFunctionsC()
>>> f1.function1(100)
www.xyz.com/
9
>>> f2.function1(100)
www.xyz.com/
9
>>> f3.function1(100)
www.xyz.com/
9
但是,如果密钥是MyFunctions
的实例属性,请让用户像往常一样将密钥传递给__init__
。
注意:我忽略了为什么需要实例化MyClass
进行设置。使用普通函数可能更简单。