📜  Python中的包装类

📅  最后修改于: 2022-05-13 01:54:47.895000             🧑  作者: Mango

Python中的包装类

装饰是一种为函数和类指定管理代码的方法。装饰器本身采用处理其他可调用对象的可调用对象的形式。类装饰器类似于函数装饰器,但它们在类语句的末尾运行以将类名重新绑定到可调用对象(例如函数)。因此,它们可以用于在创建类后立即管理类,也可以在稍后创建实例时插入一层包装逻辑来管理实例。类装饰器可用于直接管理类对象,而不是实例调用——使用新方法增加/修改类。类装饰器与函数装饰器密切相关,事实上,它们使用几乎相同的语法和非常相似的编码模式,但在某些地方逻辑不同。

注意:有关详细信息,请参阅Python中的装饰器

句法:
在语法上,类装饰器出现在类语句之前。

@decorator
class Class_Name:       
      ...

inst = Class_Name(50)

This piece of code is equivalent to

class Class_Name:
      ...

Class_Name = decorator(Class_Name)
inst = Class_Name(50);

让我们通过一个例子来理解语法,以及它是如何工作的:

例子:

# decorator accepts a class as 
# a parameter
def decorator(cls):
      
    class Wrapper:
          
        def __init__(self, x):
              
            self.wrap = cls(x)
              
        def get_name(self):
              
            # fetches the name attribute
            return self.wrap.name
          
    return Wrapper
  
@decorator
class C:
    def __init__(self, y):
        self.name = y
  
# its equivalent to saying
# C = decorator(C)
x = C("Geeks")
print(x.get_name())   

输出:

Geeks

在此示例中,装饰器将类 C 重新绑定到另一个类 Wrapper,后者将原始类保留在封闭范围内,并在调用原始类时创建并嵌入原始类的实例(包装)。在更简单的语言中, @decorator等价于C = decorator(C) ,它在类 C 的定义结束时执行。在装饰器主体中,包装类修改类 C 保持原创性或不更改cls(x)返回一个 C 类的对象(其 name 属性用 x 的值初始化)。 get_name 方法返回包装对象的名称属性。最后在输出中打印“Geeks”。

因此,这是该类的装饰器或包装器的概述。类装饰器用于向类添加附加功能,而无需更改原始类以在任何情况下根据需要使用。