在python类之间传递参数

时间:2016-01-05 22:27:50

标签: python

我正在尝试编写我的第一个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'

1 个答案:

答案 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进行设置。使用普通函数可能更简单。