现在我有一个叫A的班级.
我有一些像这样的代码..
from my.package.location.A import A
...
foo = A.doSomething(bar)
Run Code Online (Sandbox Code Playgroud)
这很棒.
但是现在我有一个名为A的新版A,但是在另一个包中,但我只想在某个场景中使用其他A. 所以我可以这样做:
if(OldVersion):
from my.package.location.A import A
else:
from new.package.location.A import A
...
foo = A.doSomething(bar)
Run Code Online (Sandbox Code Playgroud)
这很好用.但它很难看.我怎么能做得更好?我真的想做这样的事情
from my.abstraction.layer.AFactory import AFactory
...
myA = AFactory.giveMeA() # this looks at "OldVersion" and gives me the correct A
foo = myA.doSomething(bar)
Run Code Online (Sandbox Code Playgroud)
有没有办法让我更轻松?没有工厂层?现在,这可以将我的类上的每个静态方法调用转换为2行.我总是可以在类中保留一个引用以减少影响,但我真的希望python有一个更简单的解决方案.
这是我的代码,但它看起来像非python.
def __contains__(self, childName):
"""Determines if item is a child of this item"""
for c in self.children:
if c.name == childName:
return True
return False
Run Code Online (Sandbox Code Playgroud)
这种做法最"蟒蛇"的方式是什么?使用lambda过滤器功能?出于某些原因,在线实际上很少有例子与您比较属性的对象列表一起使用,它们总是使用实际字符串列表显示如何执行此操作,但这不太现实.
我正在做一些使用gerrit的工作,并且使用gerrit你只能获得提交的refspec.就像是:
refs/changes/01/15501/2
Run Code Online (Sandbox Code Playgroud)
我该如何重置这个?
我试着玩得很开心
[me@server code ((7deac0e...))]$ git reset --hard refs/changes/01/15501/2
fatal: ambiguous argument 'refs/changes/01/15501/2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
Run Code Online (Sandbox Code Playgroud)
这不是最好的错误信息,所以我试过agian ......
[me@server code ((7deac0e...))]$ git reset --hard -- refs/changes/01/15501/2
fatal: Cannot do hard reset with paths.
Run Code Online (Sandbox Code Playgroud)
我不需要使用reset --hard,但它在我的情况下会很好用.我的脚本在代码仓库中运行,但我不知道它处于什么状态.只有一个文件可靠且不会更改,这是reset_to_gerrit脚本.
我告诉该脚本重置为一些refspec,并将我的代码仓库放在一个我至少知道会发生什么的地方.原始状态和最终状态之间存在很大的合并冲突的可能性,并且重置应该避免所有这些.