面向对象进阶
1.动态为成员绑定属性
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == '__main__':
p = Person('zss', 18)
p.address = '西安'
print(p.address)
西安
2.动态绑定类属性
lass Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == '__main__':
Person.obj = '测试动态绑定'
p2=Person('lss',19)
print(p2.obj)
测试动态绑定
3.动态绑定成员方法
需要使用types模块
import types
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == '__main__':
p=Person('lss',22)
def run(self):
print("测试run方法")
p.run=types.MethodType(run,p)
p.run()
测试run方法
4.动态删除
del 对象.属性名
delattr(对象, "属性名")
5.绑定限制
为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的 slots 变量,来限制该class能添加的属性
动态语言:可以在运行的过程中,修改代码
静态语言:编译时已经确定好代码,运行过程中不能修改
class Person(object):
__slots__ = ('name','age')
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == '__main__':
p=Person('lss',22)
p.sex='男'
AttributeError: 'Person' object has no attribute 'sex'