在Python中添加一个将字符串转换为小写的装饰器

ste*_*han 2 python python-decorators

所以我是学习装饰器的新手,我已经阅读了无数的教程,虽然我理解并且基本上可以遵循所有示例,但我认为最好的学习方法是自己实现装饰器。所以我将在下面使用这个例子。我意识到装饰器根本不需要执行此操作,但为了学习,我想添加一个装饰器来过滤狗名和品种等字符串并将其转换为小写。任何正确方向的想法或指示将不胜感激。

class Dogs:
    totalDogs = 0
    dogList=[]

    def __init__(self, breed, color, age):
        self.breed=breed
        self.color=color
        self.age=age
        Dogs.dogList.append(self.breed)
        Dogs.totalDogs += 1

    def displayDogs(self):
        print "breed: ", self.breed
        print "color: ",self.color
        print "age: ",self.age
        print "list of breeds:", Dogs.dogList
        print "total dogs: ", Dogs.totalDogs

def somedecorator(*args):
    #now what

terrier=Dogs("TeRrIer", "white", 5)
terrier.displayDogs()
retriever=Dogs("goldenRETRIEVER", "brown", 10)
retriever.displayDogs()
Run Code Online (Sandbox Code Playgroud)

ayc*_*dee 5

装饰器实际上只是一个函数,它接受一个函数作为参数并返回另一个函数。

def lower_output(func):
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs).lower()
    return wrapper


class Dogs(object):
    totalDogs = 0
    dogList=[]

    def __init__(self, breed, color, age):
        self.breed=breed
        self.color=color
        self.age=age
        Dogs.dogList.append(self.breed)
        Dogs.totalDogs += 1

    @lower_output
    def get_breed(self):
        return self.breed




>>> terrier=Dogs("TeRrIer", "white", 5)
>>> terrier.get_breed()
terrier
Run Code Online (Sandbox Code Playgroud)