在Python中,是否可以为导入的模块定义别名?
例如:
import a_ridiculously_long_module_name
Run Code Online (Sandbox Code Playgroud)
...所以它的别名为'short_name'.
在Ruby中,既然你可以包含多个mixin但只扩展一个类,那么看起来mixins比继承更受欢迎.
我的问题:如果你正在编写必须扩展/包含的代码才有用,你为什么要把它变成一个类?换句话说,为什么你不总是把它变成一个模块?
我只能想到你想要一个类的一个原因,那就是你需要实例化这个类.但是,在ActiveRecord :: Base的情况下,您永远不会直接实例化它.所以不应该是一个模块而不是?
在尝试使用Typescript的时候,我意识到模块中的类(用作命名空间)不可用于其他类,除非我export在它们之前编写了关键字,例如:
module some.namespace.here
{
export class SomeClass{..}
}
Run Code Online (Sandbox Code Playgroud)
所以现在我可以使用上面这样的代码:
var someVar = new some.namespace.here.SomeClass();
Run Code Online (Sandbox Code Playgroud)
但是我只是想知道为什么使用这个关键字而不是仅仅使用public在方法级别使用的关键字来表示方法或属性应该是外部可访问的.那么为什么不使用相同的机制来使类和接口等在外部可见?
这将产生如下结果的代码:
module some.namespace.here
{
public class SomeClass{..}
}
Run Code Online (Sandbox Code Playgroud) 我开始学习python并喜欢它.我主要在Linux上使用Mac.我在Linux(大多数是Ubuntu 9.04)上发现当我使用apt-get安装python模块时它工作正常.我可以毫不费力地导入它.
在Mac上,我习惯使用Macports来安装所有的Unixy东西.但是,我发现我安装的大多数python模块都没有被python看到.我花了一些时间玩PATH设置并使用python_select.没有什么真的有用,在这一点上我并不是真正理解,而是我只是在四处寻找.
我觉得Macports并不是普遍喜欢管理python模块的.我想用更"接受"(如果这是正确的话)方法开始新鲜.
所以,我想知道,Mac python开发人员用来管理模块的方法是什么?
奖金问题:
你使用Apple的python还是其他一些版本?你是从源代码编译所有东西还是有一个运行良好的包管理器(Fink?).
我很难理解模块导入如何在Python中工作(我以前从未用任何其他语言完成它).
比方说我有:
myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py
Run Code Online (Sandbox Code Playgroud)
现在我想尝试这样的事情:
myapp.py
===================
from myapp import SomeObject
# stuff ...
TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject
Run Code Online (Sandbox Code Playgroud)
但是,我肯定做错了,因为Python无法看到这myapp是一个模块:
ImportError: No module named myapp
Run Code Online (Sandbox Code Playgroud) 该__debug__变量很方便,部分原因是它影响每个模块.如果我想创建另一个以相同方式工作的变量,我该怎么做?
变量(让我们是原始的并称之为'foo')并不一定是真正的全局变量,因为如果我在一个模块中更改foo,它会在其他模块中更新.如果我可以在导入其他模块之前设置foo然后他们会看到相同的值,我会没事的.
我想定义一个应该在包的所有子模块中可用的常量.我认为最好的地方是在__init__.pyroot包的文件中.但我不知道该怎么做.假设我有几个子包,每个子包都有几个模块.如何从这些模块中访问该变量?
当然,如果这是完全错误的,并且有更好的选择,我想知道它.
我正在查看Python multiprocessing模块的代码,它包含以下行:
from ._multiprocessing import win32, Connection, PipeConnection
Run Code Online (Sandbox Code Playgroud)
代替
from _multiprocessing import win32, Connection, PipeConnection
Run Code Online (Sandbox Code Playgroud)
微妙的差异是之前的时期_multiprocessing.那是什么意思?为什么这个时期?
如何__getattr__在模块上实现类的等价?
当调用模块静态定义的属性中不存在的函数时,我希望在该模块中创建一个类的实例,并在模块上的属性查找中使用与失败相同的名称调用其上的方法.
class A(object):
def salutation(self, accusative):
print "hello", accusative
# note this function is intentionally on the module, and not the class above
def __getattr__(mod, name):
return getattr(A(), name)
if __name__ == "__main__":
# i hope here to have my __getattr__ function above invoked, since
# salutation does not exist in the current namespace
salutation("world")
Run Code Online (Sandbox Code Playgroud)
这使:
matt@stanley:~/Desktop$ python getattrmod.py
Traceback (most recent call last):
File "getattrmod.py", line 9, in <module>
salutation("world")
NameError: name 'salutation' is not …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个导出多个ES6类的模块.假设我有以下目录结构:
my/
??? module/
??? Foo.js
??? Bar.js
??? index.js
Run Code Online (Sandbox Code Playgroud)
Foo.js并且Bar.js每个导出一个默认的ES6类:
// Foo.js
export default class Foo {
// class definition
}
// Bar.js
export default class Bar {
// class definition
}
Run Code Online (Sandbox Code Playgroud)
我目前的index.js设置如下:
import Foo from './Foo';
import Bar from './Bar';
export default {
Foo,
Bar,
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法导入.我希望能够做到这一点,但找不到类:
import {Foo, Bar} from 'my/module';
Run Code Online (Sandbox Code Playgroud)
在ES6模块中导出多个类的正确方法是什么?
module ×10
python ×7
packages ×2
alias ×1
babel ×1
class ×1
ecmascript-6 ×1
export ×1
getattr ×1
global ×1
import ×1
inheritance ×1
init ×1
javascript ×1
macos ×1
macports ×1
mixins ×1
package ×1
public ×1
python-3.x ×1
ruby ×1
typescript ×1