草庐IT

装饰者

全部标签

python - 我们真的需要python中的@staticmethod装饰器来声明静态方法吗

我很好奇为什么我们需要@staticmethod装饰器来将方法声明为static。我正在阅读Python中的静态方法,我开始知道静态方法可以在不实例化其类的情况下调用。所以我尝试了下面的两个例子,但都是一样的:classStatMethod:defstat():print("withoutDecorator")classStatMethod_with_decorator:@staticmethoddefstat():print("WithDecorator")如果我直接在类上调用stat()方法,则会打印/显示以下值:>>StatMethod.stat()withoutDecorato

python - 是否有一种 pythonic 方法可以跳过子类方法的装饰?

我有一个类使用来自另一个库的装饰器来装饰一些方法。具体来说,该类对flask-restful资源进行子类化,用httpauth.HTTPBasicAuth().login_required()修饰http方法,并对模型服务进行一些合理的默认设置。我希望在大多数子类上应用装饰器;因此我宁愿删除它也不愿将其添加到子类中。我的想法是有一个执行操作的私有(private)方法和一个装饰的公共(public)方法。可以通过覆盖公共(public)方法调用私有(private)方法而不装饰这个覆盖来避免装饰的影响。下面的模拟示例。我很想知道是否有更好的方法来做到这一点。python中是否有“取消装

python - 是否有一种 pythonic 方法可以跳过子类方法的装饰?

我有一个类使用来自另一个库的装饰器来装饰一些方法。具体来说,该类对flask-restful资源进行子类化,用httpauth.HTTPBasicAuth().login_required()修饰http方法,并对模型服务进行一些合理的默认设置。我希望在大多数子类上应用装饰器;因此我宁愿删除它也不愿将其添加到子类中。我的想法是有一个执行操作的私有(private)方法和一个装饰的公共(public)方法。可以通过覆盖公共(public)方法调用私有(private)方法而不装饰这个覆盖来避免装饰的影响。下面的模拟示例。我很想知道是否有更好的方法来做到这一点。python中是否有“取消装

python - 在 Python 对象中,如何查看已使用 @property 装饰器定义的属性列表?

我可以使用self.__dict__查看一流的成员变量,但我还想查看属性字典,如@property定义的那样装饰器。我该怎么做? 最佳答案 你可以在你的类中添加一个看起来像这样的函数:defproperties(self):class_items=self.__class__.__dict__.iteritems()returndict((k,getattr(self,k))fork,vinclass_itemsifisinstance(v,property))这将查找类中的任何属性,然后创建一个字典,其中包含每个属性的条目以及当前

python - 在 Python 对象中,如何查看已使用 @property 装饰器定义的属性列表?

我可以使用self.__dict__查看一流的成员变量,但我还想查看属性字典,如@property定义的那样装饰器。我该怎么做? 最佳答案 你可以在你的类中添加一个看起来像这样的函数:defproperties(self):class_items=self.__class__.__dict__.iteritems()returndict((k,getattr(self,k))fork,vinclass_itemsifisinstance(v,property))这将查找类中的任何属性,然后创建一个字典,其中包含每个属性的条目以及当前

python - 覆盖 Python mock 的补丁装饰器

我有一个PythonTestCase类,其中所有测试方法(一个除外)都需要以相同的方式修补对象。另一种方法需要来自同一对象的一些其他行为。我正在使用mock,所以我做了:@mock.patch('method_to_patch',mock.Mock(return_value=1))classTests(TestCase):@mock.patch('method_to_patch',mock.Mock(return_value=2))deftest_override(self):(....)但这行不通。当test_override运行时,它仍然会从类装饰器中调用修补后的行为。经过多次调试

python - 覆盖 Python mock 的补丁装饰器

我有一个PythonTestCase类,其中所有测试方法(一个除外)都需要以相同的方式修补对象。另一种方法需要来自同一对象的一些其他行为。我正在使用mock,所以我做了:@mock.patch('method_to_patch',mock.Mock(return_value=1))classTests(TestCase):@mock.patch('method_to_patch',mock.Mock(return_value=2))deftest_override(self):(....)但这行不通。当test_override运行时,它仍然会从类装饰器中调用修补后的行为。经过多次调试

python - 如何在装饰器中捕获异常但允许调用者也捕获它?

我有一个可能引发异常的python函数。调用者捕获异常并处理它。现在我想向该函数添加一个装饰器,也捕获异常,进行一些处理,然后重新引发异常以允许原始调用者处理它。这是有效的,除了当原始调用者显示来自异常的调用堆栈时,它在装饰器中显示重新引发的行,而不是它最初发生的地方。示例代码:importsys,tracebackdefmydec(func):defdec():try:func()exceptException,e:print'Decoratorhandledexception%s'%eraiseereturndec@mydecdefmyfunc():x=1/0try:myfunc(

python - 如何在装饰器中捕获异常但允许调用者也捕获它?

我有一个可能引发异常的python函数。调用者捕获异常并处理它。现在我想向该函数添加一个装饰器,也捕获异常,进行一些处理,然后重新引发异常以允许原始调用者处理它。这是有效的,除了当原始调用者显示来自异常的调用堆栈时,它在装饰器中显示重新引发的行,而不是它最初发生的地方。示例代码:importsys,tracebackdefmydec(func):defdec():try:func()exceptException,e:print'Decoratorhandledexception%s'%eraiseereturndec@mydecdefmyfunc():x=1/0try:myfunc(

Python装饰器和继承

帮助一个人。似乎无法让装饰器处理继承。将其分解为我的临时工作区中最简单的小示例。似乎仍然无法正常工作。classbar(object):def__init__(self):self.val=4defsetVal(self,x):self.val=xdefdecor(self,func):defincrement(self,x):returnfunc(self,x)+self.valreturnincrementclassfoo(bar):def__init__(self):bar.__init__(self)@decordefadd(self,x):returnx糟糕,名称“decor