Python类实现代理访问

本文介绍了如何使用Python类实现代理访问,通过代理模式将实例的属性访问转接到内部的另一个实例。文章详细讨论了代理类中_getattr_(), _setattr_() 和 _delattr_() 方法的实现,以及如何处理代理和被代理对象之间的属性区别,特别是如何只代理非私有属性。" 116122698,10538353,MATLAB仿真异步电动机机械特性分析,"['电机控制', '仿真技术', 'MATLAB', '电力电子', '自动控制']
摘要由CSDN通过智能技术生成

加入想将某个实例的属性访问代理到内部另一个实例中去,目的可能是作为继承的一个替代方法或者实现代理模式,简单来说,代理是一种编程模式,它将某个操作转移给另外一个对象来实现。

class A(object):
    def spam(self, x):
        print(x)
        pass

    def foo(self):
        pass


class B(object):
    """使用__getattr__的代理,代理方法比较多时候"""

    def __init__(self):
        self._a = A()

    def bar(self):
        pass

    # Expose all of the methods defined on class A
    def __getattr__(self, name):
        """这个方法在访问的attribute不存在的时候被调用
        the __getattr__() method is actually a fallback method
        that only gets called when an attribute is not found"""
        return getattr(self._a, name)


if __name__ == "__main__":
    b = B()
    b.bar()
    b.spam(100)
    b.foo()

  • 实现代理模式
class Proxy(object):
    def __init__(self, obj):
        self._obj = obj

    def __getattr__(self, name):
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值