python 动态绑定属性方法

import types


# 定义类
class Person(object):

    num = 0

    def __init__(self, name, age=None):
        self.name = name
        self.age = age

    def eat(self):
        print('eat food')


# 定义实例方法
def run(self, speed):
    print("{} 在移动,速度是{}".format(self.name, speed))


# 定义类方法
@classmethod
def testClass(cls):
    cls.num = 100


# 定义静态方法
@staticmethod
def testStatic():
    print('--static method--')


# 创建实例
P = Person('老王', 24)

# 调用在class中的方法
P.eat()

# 给这个对象添加实例方法

# 错误写法:
# P.run = run(180)   #TypeError: run() missing 1 required positional argument: 'speed'

# 正确写法, 可以直接给这个类绑上方法, 或者是用types.MethodType(run, P)给实例绑上方法
# Person.run = run
# p2 = Person('小李', 25)
# p2.eat()
# p2.run(30)
# p3 = Person('校长', 30)
# p3.run(300)


P.run = types.MethodType(run, P)
P.run(180)


# 给Person 类绑定类方法
Person.testClass = testClass

# 调用类方法
print(Person.num)
Person.testClass()  # 后面都修改了
print(Person.num)

p2 = Person('lili', 22)
print(p2.num)



# 给Person 绑定静态方法
Person.testStatic = testStatic
Person.testStatic()


#
# 运行的过程中删除属性、方法
# 删除的方法:
# 
# del 对象.属性名
# delattr(对象, “属性名”)
# 通过以上例子可以得出一个结论:相对于动态语言,静态语言具有严谨性!所以,玩动态语言的时候,小心动态的坑!
#
# 那么怎么避免这种情况呢? 请使用slots,

 

 

eat food
老王 在移动,速度是180
0
100
100
--static method--

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值