Python:在函数中使用类内部导入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:在函数中使用类内部导入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1796字,纯文字阅读大概需要3分钟。
内容图文
![Python:在函数中使用类内部导入](/upload/InfoBanner/zyjiaocheng/758/7a7d1006ec4841f6b0e22497afbe88ec.jpg)
任何人都可以解释如何使以下示例工作?由于类中的几个函数将使用平台中的相同函数,我认为最好在类内部导入它,但我不知道如何在函数内部使用它(因为我经常出错关于它).
#!/usr/bin/python
class test:
from platform import system
is_linux(self):
system = system()
if system == "Linux": return True
一个更好的例子:
#!/usr/bin/python
# Add ANSI colour strings
class stdout:
from sys import stdout
def message(message, self): stdout.write(message)
注意:这只是一个片段,有一些部分缺失,但我的意思是一个例子.
我知道我可能只是移动system = system()并使用self.system但也许更好的方法?
解决方法:
嗯,事情并非那么简单.
实际上,import语句在很多方面看起来像直接定义某些东西而不是它.如果你写
class test:
from platform import system
它看起来很像
class test:
def system():
# ....
然后你有以下问题:
>您不能仅使用system(),因为系统不在全局范围内
>你不能使用self.system(),因为在这种形式中,python自动将self作为第一个参数传递,但是system()没有参数,你将获得TypeError:system()不带参数(给定1个)
>你不能使用test.system(),因为system()看起来像一个普通的方法,你会得到TypeError:必须用测试实例作为第一个参数调用unbound方法system()(没有任何改为)
围绕这些问题有几种方法:
>将导入平台置于顶层,并在任何地方使用platform.system(),从而解决prev的问题#1.名单
>使用staticmethod装饰器,修复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])
在此示例中,从sys import argv移动是有效的,因为仅在运行脚本时才需要它.但是当您将其用作导入模块时,此导入中不需要它.
但这不是你的情况,因为在你的情况下,测试类总是需要system(),所以没有理由将这个导入从顶层移动.把它留在那里,没关系.
内容总结
以上是互联网集市为您收集整理的Python:在函数中使用类内部导入全部内容,希望文章能够帮你解决Python:在函数中使用类内部导入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。