Tag: 装饰器

通过方法属性ASP.NET MVC路由

在StackOverflow Podcast#54中 ,Jeff提到他们通过处理路由的方法上面的一个属性在StackOverflow代码库中注册他们的URL路由。 听起来像一个很好的概念(与Phil Haack提出的有关路线优先权的警告)。 有人可以提供一些样本来实现这个目标吗? 另外,使用这种风格的路由的任何“最佳做法”?

在Python中创build一个单例

这个问题不是讨论单例devise模式是否合意,是反模式还是任何宗教战争,而是讨论如何在python中最好的实现这种模式。 在这种情况下,我把“最pythonic”定义为遵循“最不惊讶的原则” 。 我有多个类将成为单身(我的用例是一个logging器,但这不是重要的)。 当我可以简单地inheritance或装饰时,我不希望杂乱地加上几个类似的东西。 最好的方法: 方法1:一个装饰器 def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass 优点 装饰器是以一种比多重inheritance更直观的方式添加的。 缺点 虽然使用MyClass()创build的对象将是真正的单例对象,MyClass本身是一个函数,而不是一个类,所以你不能从它调用类的方法。 另外对于m = MyClass(); n = MyClass(); o = type(n)(); m = MyClass(); n = MyClass(); o = type(n)(); 那么m […]

@property装饰器是如何工作的?

我想了解内置的函数property如何工作。 令我困扰的是,这个property也可以作为装饰器使用,但是当它作为一个内置函数使用时,它仅仅需要参数,而不能当作装饰器使用。 这个例子来自文档 : class C(object): def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.") property的参数是getx , setx , delx和一个文档string。 在下面的代码中, property被用作装饰器。 它的对象是x函数,但在上面的代码中,参数中没有对象函数的地方。 class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' […]

“at”(@)符号在Python中做什么?

我正在看一些使用@符号的Python代码,但我不知道它的作用。 我也不知道如何searchPython文档,或者当包含@符号时Google不返回相关结果。