我试过了:
__all__ = ['SpamPublicClass']
Run Code Online (Sandbox Code Playgroud)
但是,当然这只是为了:
from spammodule import *
Run Code Online (Sandbox Code Playgroud)
有没有办法阻止导入类.我担心我的代码的API级别会出现混淆,有人会写:
from spammodule import SimilarSpamClass
Run Code Online (Sandbox Code Playgroud)
它会导致调试混乱.
考虑一个模块,例如some_module,各个模块在同一解释程序中使用。该模块将具有单个上下文。为了使some_module方法起作用,它必须接收类实例的依赖项注入。
将依赖项注入模块的pythonic和优雅的方法是什么?
所以我有这个PrettyTable示例,我从文档中复制了但是我收到了一个错误.
#!/usr/bin/python
from prettytable import PrettyTable
import csv
x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
x.align["City name"] = "l" # Left align city names
x.padding_width = 1 # One space between column edges and contents (default)
x.add_row(["Adelaide",1295, 1158259, 600.5])
x.add_row(["Brisbane",5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
print x
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误.
Traceback (most recent call last):
File "/home/definity/Desktop/Cloud/code/Python/Finacial.py", line 3, in <module>
from prettytable import …Run Code Online (Sandbox Code Playgroud) 我是新手,Python正在创建一个模块以重用一些代码。我的模块(impy.py)看起来像这样(到目前为止,它只有一个功能)...
import numpy as np
def read_image(fname):
....
Run Code Online (Sandbox Code Playgroud)
并将其存储在以下目录中:
custom_modules/
__init.py__
impy.py
Run Code Online (Sandbox Code Playgroud)
如您所见,它使用了numpy模块。问题是当我从另一个脚本导入它时,就像这样...
import custom_modules.impy as im
Run Code Online (Sandbox Code Playgroud)
然后我输入im.不仅可以调用函数的选项,还可以调用read_image()模块的选项np。
如何使它仅可用于我在模块中编写的功能,而不能在模块正在调用的模块(在这种情况下为numpy)中使用?
非常感谢您的帮助。
我用了:
import urllib.request
Run Code Online (Sandbox Code Playgroud)
然后:
d={'value':12345}
urllib.parse.urlencode(d)
Run Code Online (Sandbox Code Playgroud)
我希望python抛出一个异常,因为我没有导入urllib.parse,而是它工作了.它是什么原因?
PS:我使用的是Python 3.3.3
假设我有两个版本的python软件包,称“ lib”。一个在文件夹中~/version1/lib,另一个在文件夹中~/version2/lib。我正在尝试通过执行以下操作在一个会话中加载两个软件包:
sys.path.insert(0, '~/version1')
import lib as a
sys.path.insert(0, '~/version2')
import lib as b
Run Code Online (Sandbox Code Playgroud)
但是由于缓存的原因,b它与相同,因此不起作用a。
反正有做吗?也许使用挂钩sys.meta_path?我没有弄清楚。
还是有删除进口模块缓存的方法?
我目前正在使用Python 2.7,我正在尝试加载这样的文件:
myPlt = imp.load_source('SourceFile', 'path/to/SourceFile.py')
Run Code Online (Sandbox Code Playgroud)
但是,SourceFile.py导入模块OtherModule,它与SourceFile位于同一目录中.包结构如下所示:
/path
.../to
...SourceFile.py
...OtherModule.py
...__init__.py
Run Code Online (Sandbox Code Playgroud)
当我运行load_source时,我收到错误"ImportError:No module named OtherModule"
我的load_source调用不正确吗?我应该采用另一种方式来导入SourceFile吗?
使用importlib,“元路径查找器”(通过sys.meta_path遍历发现)和“路径条目查找器”(通过sys.path_hooks遍历发现)有什么区别?
第一种类型在导入开始时被调用,但是第二种类型何时使用?两者都返回规格对象吗?
我要实现自定义导入,可以从* .py或* .pyc以外的其他来源(例如,从流)导入模块。如何才能做到这一点?
我正在尝试替换类中定义的函数,以便在不更改实际代码的情况下修改其函数(如在内部工作中).我之前从未这样做过,因此在更换它时遇到了一些问题.更改代码将让我访问我的python库中的包,这是一个不太多的选择.
例如,如果模块名为testMOD
class testMOD(object):
def testFunc(self, variable):
var = variable
self.something = var + 12
Run Code Online (Sandbox Code Playgroud)
然后我将导入testMOD,定义一个类(mytest = testMOD()),并访问类testFunc中定义的函数,并将其更改为已定义的函数.
例如,
from somemodule import testMOD
mytest = testMOD()
def alternativeFunc(self, variable):
var = variable
self.something = var + 1.2
#problem here
mytest.testFunc = alternativeFunc
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,如果我只是使用我定义的函数手动覆盖(?)类中的函数,它将无法正常工作.它没有给出任何语法错误,但是,问题是被替换的函数认为'self'是函数的另一个变量,并且说它需要另一个参数用于'变量'变量(我想这不是一个好名字).
我想要做的是使替换功能与被替换的功能完全相同,但需要额外的代码或一些小修改.但是,"自我"几乎不起作用,因为它应该在课堂上.是否有办法正确实现定义的函数来替换导入类的函数?
python ×10
python-module ×10
python-2.7 ×2
class ×1
function ×1
import ×1
module ×1
package ×1
visibility ×1