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

Python中是否存在与Proxy和Reflect类似的技术实现?

Python 中对应 JavaScript Proxy 和 Reflect 的替代方案

一、替代 JavaScript Proxy(对象操作拦截)

Python 没有原生提供像 JS Proxy 那样开箱即用的全局代理对象,但可以通过重写类的特殊方法实现对属性/方法操作的拦截,核心方法包括:

  • __getattr__:拦截不存在的属性获取(已存在的属性不会触发)
  • __getattribute__:拦截所有属性/方法的获取(需谨慎使用,避免递归调用)
  • __setattr__:拦截属性赋值操作
  • __delattr__:拦截属性删除操作
  • __getitem__/__setitem__:拦截字典/序列的索引操作

示例:自定义属性拦截代理

class ObjectProxy:
    def __init__(self, target):
        # 用__dict__直接设置,避免触发__setattr__递归
        self.__dict__["_target"] = target

    def __getattr__(self, name):
        print(f"[拦截] 获取属性: {name}")
        return getattr(self._target, name)

    def __setattr__(self, name, value):
        print(f"[拦截] 设置属性: {name} = {value}")
        setattr(self._target, name, value)

    def __delattr__(self, name):
        print(f"[拦截] 删除属性: {name}")
        delattr(self._target, name)

# 使用示例
target_obj = {"username": "john_doe", "age": 28}
proxy = ObjectProxy(target_obj)

print(proxy.username)  # 输出拦截日志 + john_doe
proxy.age = 29         # 输出拦截日志
del proxy.age          # 输出拦截日志

如果需要更灵活的代理(如拦截函数调用、类实例化),可以使用第三方库 wrapt,它提供了更简洁的代理封装,支持对函数、类、对象的全方位拦截。


二、替代 JavaScript Reflect(反射操作)

Python 的反射能力由内置函数和 inspect 模块共同提供,完全覆盖 JS Reflect 的核心功能:

核心反射操作示例

import inspect

class User:
    def __init__(self, name):
        self.name = name
    def say_hello(self):
        return f"Hello, {self.name}!"

user = User("Alice")

# 1. 获取/设置/删除属性
print(getattr(user, "name"))       # 等价于 Reflect.get()
setattr(user, "name", "Bob")       # 等价于 Reflect.set()
delattr(user, "name")              # 等价于 Reflect.deleteProperty()

# 2. 检查属性是否存在
print(hasattr(user, "say_hello"))  # 等价于 Reflect.has()

# 3. 反射调用方法
hello_method = getattr(user, "say_hello")
print(hello_method())              # 等价于 Reflect.apply()

# 4. 获取对象的属性列表
print(dir(user))                   # 等价于 Reflect.ownKeys()

# 5. 解析方法签名
method_sig = inspect.signature(hello_method)
print(method_sig)                  # 输出 ()

inspect 模块还支持获取类的继承关系、函数参数信息、源码等高级反射功能,比 JS Reflect 更强大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:35:10