用三种不同方法给类绑定属性, 第三种方法似乎出了什么问题?

grayloach1 2019-04-19 05:09:14

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class MyClass:
def __init__(self, name):
self.name = name

def get_attr(m):
#返回属性(不包括那些由双下划线开始的默认属性)
return [a for a in dir(m) if not a.startswith('__')]

def set_a(self, value):
self.a = value

def set_b(self, value):
self.b = value

def set_c(self, value):
self.c = value

m = MyClass('Test')
print('原始属性 :',get_attr(m))

from types import MethodType
MyClass.set_a = set_a #方法一:属性赋值
setattr(MyClass, 'set_b', set_b) #方法二:设置属性
MyClass.set_c = MethodType(set_c, MyClass) #方法三:绑定方法
print('绑定方法之后:',get_attr(m))

m.set_a(1)
m.set_b(2)
m.set_c(3)
get_attr(m)
print('执行方法之后:',get_attr(m))

m2 = MyClass('Test2')
print('新建实例属性:',get_attr(m2))


输出结果为:


原始属性 : ['name']
绑定方法之后: ['name', 'set_a', 'set_b', 'set_c']
执行方法之后: ['a', 'b', 'c', 'name', 'set_a', 'set_b', 'set_c']
新建实例属性: ['c', 'name', 'set_a', 'set_b', 'set_c']
...全文
64 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧