Python是动态语言:动态添加或删除属性、方法

Python是动态语言:动态编辑属性、动态编辑方法

上一篇文章: Python元类
上一篇文章: Python装饰器:python真正入门的鉴定标准

1、运行过程中给对象绑定、删除属性

实例:

class Person():
    def __init__(self,name):
        self.name=name
#定义一个对象
mark=Person("mark")#终于修炼成人了,好开森
print("报出我的大名",mark.name)

#直接新定义属性:age
mark.age=18
print("我的实际年龄:",mark.age)#哎?,写大了,我还是个宝宝?

#动态删除属性:
del mark.age
#这种方法删除也可以
#delattr(Person,"age")
#下面一句会报错
#print("我的实际年龄:",mark.age)#哎?,写大了,我还是个宝宝?

结果:

报出我的大名 mark
我的实际年龄: 18

2、运行过程动态绑定方法、删除方法

import types
class Person():
    def __init__(self,name):
        self.name=name
    def study(self):
        print("学习使我快乐")

#定义一个方法
def run(self,speed):
    print("我竟然会跑?,速度:",speed)

#定义一个类方法
@classmethod
def classmethod_fun(cls):
    print("我是类方法")




#定义一个静态方法
@staticmethod
def static_fun():
    print("我是静态方法")

#定义一个对象
mark=Person("mark")
mark.study()

#动态生命函数
mark.run=types.MethodType(run,mark)
#跑起来?
mark.run(100)

#绑定类方法
Person.classmethod_fun=classmethod_fun
#调用类方法
Person.classmethod_fun()
mark.classmethod_fun()

#绑定静态方法
Person.static_fun=static_fun
#调用静态放
Person.static_fun()

#删除方法
del Person.classmethod_fun
#下面一句会异常
#mark.classmethod_fun()

#这种方法删除也可以
delattr(Person,"static_fun")
#下面一句会异常
#Person.static_fun()

运行结果:

学习使我快乐
我竟然会跑?,速度: 100
我是类方法
我是类方法
我是静态方法

3、__slots__限制实例动态添加属性

仅仅对当前类有效,对继承类无效

实例:

class Person():
    __slots__ = ("name","age")
mark=Person()
mark.name="mark"
mark.age=18
#下面一句会报错
mark.object="在哪"

结果:

Traceback (most recent call last):
File "/Users/zhaolixiang/Desktop/python/test1/python是动态语言/3、slots.py", line 8, in <module>
mark.object="在哪"
AttributeError: 'Person' object has no attribute 'object'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值