You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何在装饰器内部方法中访问装饰器所属类的self?

解决类装饰器中访问父类变量的问题

首先修正原代码中的语法错误:类内部定义类属性时,不能直接使用self,self是实例方法中代表实例的参数,类属性应直接绑定在类上。

接下来针对你的需求,分两种场景给出解决方案:

场景1:访问类A的类属性

如果someVarInsideClassA是类A的类属性,你可以直接在装饰器中通过A.someVarInsideClassA访问——类属性属于类本身,和具体实例无关。修正后的代码如下:

class A:
    # 正确定义类属性,无需self
    someVarInsideClassA = "hello some variable inside class A"

    def Decorators(func):
        def inner(self):
            print("Decoration started.")
            # 直接通过类名访问类属性
            print(A.someVarInsideClassA)
            func(self)
            print("Decoration of function completed.\n")
        return inner

    @Decorators
    def fun1(self):
        print("Decorating - Class A methods.")


class B(A):
    @A.Decorators
    def fun2(self):
        print("Decoration - Class B methods.")


obj = B()
obj.fun1()
obj.fun2()

场景2:访问类A的实例属性

如果someVarInsideClassA是实例属性(每个实例拥有独立副本),需在类A的__init__方法中定义。由于B继承了A,B的实例也会继承该属性,装饰器中的self可以直接访问:

class A:
    def __init__(self):
        self.someVarInsideClassA = "hello some variable inside class A"

    def Decorators(func):
        def inner(self):
            print("Decoration started.")
            # self是B的实例,但继承了A的实例属性,可直接访问
            print(self.someVarInsideClassA)
            func(self)
            print("Decoration of function completed.\n")
        return inner

    @Decorators
    def fun1(self):
        print("Decorating - Class A methods.")


class B(A):
    @A.Decorators
    def fun2(self):
        print("Decoration - Class B methods.")


obj = B()
obj.fun1()
obj.fun2()

额外优化:装饰器的规范写法

你当前的Decorators是类A中的普通函数,更规范的做法是将其定义为静态方法,避免潜在的绑定问题:

class A:
    someVarInsideClassA = "hello some variable inside class A"

    @staticmethod
    def Decorators(func):
        def inner(self):
            print("Decoration started.")
            print(A.someVarInsideClassA)
            func(self)
            print("Decoration of function completed.\n")
        return inner

    # 后续代码与之前一致...

内容的提问来源于stack exchange,提问作者scorpion35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 18:34:52