python动态绑定属性或方法
- 动态绑定属性 (对象名.绑定属性=“value值”)
定义一个Student类
class Student(object):
def __init__(self,name):
self.name=name
pass
创建一个实例
s = Student('半夏动漫')
动态给实例绑定属性belongs
s.belongs = "快手动漫"
print(s.__dict__)
print("姓名:%s" % s.name)
print("平台:%s" % s.belongs)
# {'name': '半夏动漫', 'belongs': '快手动漫'}
# 姓名:半夏动漫
# 平台:快手动漫
- 动态绑定方法
最简单的动态绑定方法:
先创建一个类
class Student(object):
def __init__(self):
self
在类外定义一个函数
def set_score():
print("恭喜你!成功绑定了这个方法")
创建两个实例数s,t
s = Student()
t=Student()
给实例s动态绑定set_score方法
s.set_score = set_score
s.set_score()
# t.set_score() # 没绑定会报错
print(s.__dict__)
print(t.__dict__)
结果是:
# 恭喜你!成功绑定了这个方法
# {'set_score': <function set_score at 0x000002274648F160>}
# {}
- 除了给实例对象动态绑定属性和方法外,还可以直接给类进行绑定
类绑定的方法和属性,所有实例对象都可以调用
但绑定的属性相当于类变量
先创建一个类
class Student(object):
def __init__(self,name):
self.name=name
定义一个函数作为实例方法
def set_score(self, score):
self.score = score
给class绑定方法
Student.set_score = set_score
Student.sex='男生'
创建实例
s1 = Student('雨')
s2 = Student('云')
s1.set_score("98")
print("实例s:%s" % s1.score)
s2.set_score("96")
print("实例s2:%s" % s2.score)
print(s1.__dict__)
print(s2.__dict__)
print(Student.__dict__)
print("s1是:",s1.sex)
print("s2是:",s2.sex)
print(Student.sex)
结果是:
# 实例s:98
# 实例s2:96
# {'name': '雨', 'score': '98'}
# {'name': '云', 'score': '96'}
# {'__module__': '__main__', '__init__': <function Student.__init__ at 0x000002F16B17CE50>,
# '__dict__': <attribute '__dict__' of 'Student' objects>,
# '__weakref__': <attribute '__weakref__' of 'Student' objects>,
# '__doc__': None, 'set_score': <function set_score at 0x000002F16B02F160>,
# 'sex': '男生'}
# s1是: 男生
# s2是: 男生