如何在Python中仅导入类方法

9
我是一名有用的助手,能够进行文本翻译。
我有一个GP.py文件,然后从中运行MyBot.py文件。
在MyBot.py文件中,我有以下代码行:
from GP import *

我怀疑它正在导入整个文件,而不仅仅是我想要的类方法和类描述。在GP.py文件中,除了定义之外还有其他代码。

1
它确实导入整个文件。没有办法避免这个问题。 - holdenweb
5个回答

21

你不能单独导入类方法,必须导入整个类。你可以通过枚举要导入的类来实现:

from GP import class1, class2, class3

请注意,这仍会加载整个模块。如果你从该模块导入任何内容,则始终会发生这种情况。如果在该模块中有代码不希望在导入模块时被执行,可以像这样进行保护:

if __name__ == "__main__":
    # put code here

只有在直接运行模块时,才会执行代码块中的内容,而不是在导入该模块时执行。


5

_single_leading_underscore: 弱的“内部使用”指示。例如,from M import * 不会导入名称以下划线开头的对象。

请使用以下方式代替:

from GP import SomeClass

如果您想使用import *,请查看PEP-8(Python指南)

用于通过from M import *使用的模块应使用__all__机制防止导出全局变量


4

不建议从模块中导入所有内容。Python之禅说:“显式优于隐式”。

这样做可能会覆盖现有名称并产生一些副作用。您应该始终掌握命名空间。

您可以按照以下方式导入类和函数:

from GP import MyClass, my_function

一个替代方案是导入模块本身。
import GP
GP.my_function()
GP.MyClass()

这样做可以为GP模块创建一个命名空间,避免覆盖其他东西。
希望能帮到您。

从模块中导入*可以正确使用,只要遵循一些指南,比如仅在一个文件中使用它。根据您的情况,需要注意一些细节。 - jouell

1

import * 确实会导入所有的类、函数、变量等等。

如果你只想导入特定的类,请使用

from GP import class_name

据我所知,您无法仅导入类方法


-4

如果你只想从类中导入一些方法

from GP.MyClass import MyFunction

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接