Python动态语言特性简单例子

2025-11-06 05:21:21

1、打开python开发工具IDLE,新建‘pdt.py’文件,编写代码如下:

class mytest():

    def __init__(self,name):

        self.name = name

mt1 = mytest('张三')

print (mt1.name)

Python动态语言特性简单例子

2、F5运行程序,打印出mytest类对象mt1的name字段。

Python动态语言特性简单例子

3、通过setattr,动态改变mt1对象的name字段值,代码如下:

class mytest():

    def __init__(self,name):

        self.name = name

mt1 = mytest('张三')

print (mt1.name)

setattr(mt1,"name",'李四')

print (mt1.name)

Python动态语言特性简单例子

4、F5运行程序,打印出mytest类对象mt1的name字段‘张三’,以及动态改变之后的‘李四’

Python动态语言特性简单例子

5、接下来写一个复杂点的类中的函数,在调用时候动态改变,代码如下;

class mytest:

    def __init__(self,name):

        self.name = name

    def before(self):

        print ('before school')

    def after(self):

        print ('after school')

class myparpre:

    def __init__(self,target):

        self.target = target

    def __getattribute__(self,name):

        target = object.__getattribute__(self,'target')

        atr = object.__getattribute__(target,name)

        if name == 'before':

            def fun(*args,**kwargs):

                print ('school bag')

                result = atr(*args,**kwargs)

                return result

            return fun

        else:

            return atr

解释一下:        

myparpre类的对象调用一个方法,或者访问一个字段的时候,都会通过

__getattribute__先找到这个对象的变量target,这个变量就是传入的mt1,再通过__getattribute__找到mt1的方法,就可以在mt1方法执行前或执行后,做操作了

Python动态语言特性简单例子

6、添加代码进行方法调用,完整代码如下:

class mytest:

    def __init__(self,name):

        self.name = name

    def before(self):

        print ('before school')

    def after(self):

        print ('after school')

class myparpre:

    def __init__(self,target):

        self.target = target

    def __getattribute__(self,name):

        target = object.__getattribute__(self,'target')

        atr = object.__getattribute__(target,name)

        if name == 'before':

            def fun(*args,**kwargs):

                print ('school bag')

                result = atr(*args,**kwargs)

                return result

            return fun

        else:

            return atr

        

mt1 = mytest('张三')

mp1 = myparpre(mt1)

mp1.before()

print ('-------')

mp1.after()

Python动态语言特性简单例子

7、F5运行程序,可以看到在执行before函数前做了新操作,而after函数没有变化

Python动态语言特性简单例子

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢