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

标签 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()

最佳答案

装饰器实际上只是一个将一个函数作为参数并返回另一个函数的函数。

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

关于python - 在 Python 中添加将字符串转换为小写的装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19508365/

相关文章:

python - 使用 Pandas 进行数据操作

python - 是否可以使这个 shell 脚本更快?

python - 如何将实例变量传递给类定义内的装饰器?

python - 我想装饰一个类中的方法但不编辑 class.py -- 里面的细节

python - 有@staticmethod 和没有它的区别

python - 内存使用实例属性的函数

python - 在 python 中发现装饰类实例方法

python - 对 pandas 数据框中的单元格值进行 groupby

python - 如何在 Perl 中获得与 python 的 raw_input() 相同的效果?

python - Django 管理模型继承可能吗?