Python的函数装饰器是否有C#模拟?感觉它可以使用属性和反射框架,但我没有看到在运行时替换函数的方法.
Python装饰器通常以这种方式工作:
class decorator(obj):
def __init__(self, f):
self.f = f
def __call__(self, *args, **kwargs):
print "Before"
self.f()
print "After"
@decorator
def func1():
print "Function 1"
@decorator
def func2():
print "Function 2"
Run Code Online (Sandbox Code Playgroud)
然后调用func1和func2将导致
Before Function 1 After Before Function 2 After
我们的想法是装饰器可以让我轻松地在多个功能的入口和出口点添加常见任务.
假设我在文件A中有函数X,我想将该函数移动到文件B.同时,其他人对文件A中的函数X进行了更改.
合并这两个变化时git是否做了什么特别的事情?它是否会识别相同的功能被移动到文件B并在那里应用更改?或者我们最终会丢失更改或在文件A和B中有两个相同功能的副本?
我发现的关于在git中移动代码的大多数文章主要是指重命名整个文件而不是文件内的代码块.我发现的最接近的是来自内核陷阱的Linus:
当使用git时,整个'保持代码移动与更改分开'有一个更基本的原因:git可以跟踪代码移动(再次,无论是移动整个文件还是只移动文件之间的函数),并做一个'git blame - C'实际上将遵循文件之间的代码移动.它通过相似性分析来做到这一点,但它确实意味着如果你同时移动代码并改变它,git就看不到'哦,那个函数最初来自那个其他文件',现在你得到更糟糕的注释代码实际来自哪里.
所以看起来git会认识到代码被移动到其他地方,但并没有真正说明合并期间会发生什么.