## 动态添加属性
class Person:
def __init__(self,name):
self.name = name
# 1.通过对象.属性名称来操作
p = Person('KTModel')
p.address = '深圳'
print(p.address)
# 2.通过 setattr(对象,属性名称,这个属性名的值)方法
if not hasattr(p,"phone"):
setattr(p,"phone","187xxx")
print(p.phone)
## 动态添加实例方法: 使用types.ModuleType
import types
class Father(object):
def __init__(self,name):
self.name = name
def son(self):
print('我是{}的son'.format(self.name))
fa = Father('Father')
fa.son = types.MethodType(son,fa)
fa.son()
## 动态添加动态类:
class Apple(object):
country = 'China'
def __init__(self,name):
self.name = name
@classmethod
def run(cls):
print('Apple生产地是属于哪里:{}'.format(cls.country))
Apple.run = run
Apple.run()
## 动态添加静态类:
class Origin(object):
country = 'China'
def __init__(self,name):
self.name = name
@staticmethod
def run():
print('Origin生产地是属于哪里在中国')
Origin.run = run
Origin.run()
# 动态删除属性和方法:
# 1. del 对象.属性名
# 2. delattr(对象,"属性名")
# __slots__魔术变量:
# 有时候我们想指定某个类的对象,只能使用我指定的这些属性,不能随便添加其他的属性,那么这时候就可以使用__slots__魔术变量。
# 这个魔术变量是一个列表或者一个元组,里面存放属性的名字,以后在对象外面,就只能添加这个魔术变量中指定的属性,不能添加其他属性。
# 示例代码如下:
class Mother(object):
__slots__ = ("name","age","address")
def __init__(self,name):
self.name = name
mo = Mother('Teacher')
mo.Hua = '666'
print(mo.Hua) # 报错