2016-03-07 70 views
-2

我觀察到python裝飾器不需要返回一個可調用的。在django queryset中的例子下面試過。這是一種不好的做法嗎?編寫不返回可調用的裝飾器是pythonic嗎?

class MyQuerySet(models.QuerySet): 

    ... 

    def each(self, save=False, func=None): 
     if hasattr(save, '__call__'): 
      func = save 
      save = False 
     for obj in self: 
      func(obj) 
      if save: 
       obj.save() 

MyModel.objects.each(lambda x: x.delete()) # Delete all the mymodels from database 

@Person.objects.each(save=True): 
def make_older(person): 
    ''' Increase age of all people ''' 
    person.age += 1 

PS:

是否在某些這種技術可以用於多種有用的目的任何情況呢?

+1

你可以發佈一些有效的代碼:[如何創建一個最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve)? –

+3

裝飾器只是語法糖,所以問題是,你爲什麼要使用裝飾器語法呢?它使代碼更簡單還是更容易維護? – cdarke

回答

1

Python Glossary

裝飾

函數返回另一個函數,通常用作使用@wrapper語法函數變換。裝飾器的常見例子是classmethod()和staticmethod()。

編輯:不返回一個可調用的裝飾器將不歸入術語「裝飾」的這個官方defnition。它會通過unpythonic。

+0

這是如何回答OP的問題? – Sayse

+0

編輯我的答案。 – 2016-03-07 08:11:14

相關問題