我对进口有疑问.这个问题似乎有点人为,但其目的是探讨在包中使用绝对导入对所有导入的限制. PEP8强烈反对相对导入(编辑:Google Python样式指南说永远不要使用它们).
假设您有两个大型包,它们都具有相同的名称,并且都根据PEP8使用绝对导入:
/pkg1
mod1.py (contains an absolute import: 'import pkg1.mod2')
mod2.py
...
/pkg1
mod1.py (contains an absolute import: 'import pkg1.mod3')
mod3.py
...
还要说你正在开发一个你想要使用这两个包的Python项目.例如,如果您想在项目中使用同一个包的两个版本,就会出现这种情况.
有没有办法将两个包合并到项目层次结构中,以便您可以在整个项目中自由使用两个包中的模块?
对于解决方案,可以使用导入别名和临时修改sys.path等操作.但是改变任一包目录的内容都是不可取的.
如果我有一堆的未提交更改到一个单一的文件在我的Git工作目录,什么是这些变化中有选择地挑选最简单的方法是什么?
我目前的方法是"git diff"文件,然后手动查看实际文件旁边的差异.如果我想恢复一些旧代码,我可以从diff复制并粘贴到文件中.
如果可以在单个文件中查看和编辑更改,则在某些情况下会更容易.例如,是否有一个Git命令可用于将工作文件转换为类似冲突解决方案的格式 - 即在未提交的更改周围使用"<<<<"符号?通过这种方式,您可以选择更改而无需从一个文件剪切和粘贴到另一个文件.
我不知道如何实现这一点,因为它不是一个三向(合并)的情况.相反,它是一种双向情况,对一个文件进行一组更改(因此没有冲突).谢谢.
假设您在Python中有一个公共方法,其主要目的是检索基础数据属性的值(即内部后备存储).该方法可以具有惰性评估逻辑等.属性是这种方法的示例.
然后,对于方法和数据属性使用相同的名称是自然的,除了数据属性的下划线前缀.例如 -
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
Run Code Online (Sandbox Code Playgroud)
(来自Python的"属性"文档)
但是,如果该方法是供内部使用的,那么有哪些首选约定,因此它本身以下划线为前缀?使用两个前导下划线前缀后备存储将调用名称修改,因此不太理想.
有两种可能性 -
def _get_x(self):
return self._x
def _x(self):
return self._x_
Run Code Online (Sandbox Code Playgroud)
Python样式说第二个(附加下划线),应该只用于避免与保留关键字冲突.
如果导入的模块来自C扩展而不是纯Python模块,那么从Python中判断出正确或最强大的方法是什么?这很有用,例如,如果Python包具有既包含纯Python实现又包含C实现的模块,并且您希望能够在运行时告知正在使用哪个模块.
一个想法是检查文件扩展名module.__file__,但我不确定应该检查所有文件扩展名,以及这种方法是否必须最可靠.
在Django中,有没有一种简单的方法来测试对象上的模型字段是否已经从数据库中查询过(例如来自外键关系的对象)?
我想在我的一个测试中做出这样的断言,以确保访问我的一个对象上的特定属性不会触发额外的数据库查询.