python导入类中函数不能用_Python:在函数中使用在类内部完成的导入

嗯,不是那么简单。

实际上,import语句在很多方面看起来像是直接定义了某个东西来代替它。如果你写信class test:

from platform import system

看起来很像class test:

def system():

# ....

然后你有以下问题:不能只使用system(),因为系统不在全局范围内

不能使用self.system(),因为在这种形式下,python会自动将self作为第一个参数传递,但是system()没有参数,您将得到TypeError: system() takes no arguments (1 given)

您不能使用test.system(),因为system()看起来像一个普通的方法,您将得到TypeError: unbound method system() must be called with test instance as first argument (got nothing instead)

有几种方法可以解决这些问题:将import platform放在顶层,并在任何需要的地方使用platform.system(),从而修复prev中的问题1。列表

使用staticmethoddecorator,修复来自prev的问题2和3。列表。

就像class test:

from platform import system

system = staticmethod(system)

然后可以使用self.system()或test.system()

实际上,你应该把所有东西都导入顶层,然后忘掉它。

如果需要特殊的东西来运行,则只需拆分导入声明。

就像import foo

import bar

def fun(param1, param2):

# .....

if __name__ == '__main__':

from sys import argv

if len(argv) > 2:

fun(argv[1], argv[2])

在本例中,移动from sys import argv是有效的,因为只有在运行脚本时才需要它。但是,当您将其用作导入模块时,不需要进行此导入。

但这不是您的情况,因为在您的情况下,测试类总是需要system(),所以没有理由将此导入从顶层移动。就把它放在那儿别管了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值