Python是动态语言,可以在运行时改变结构的语言:例如新的函数,对象
静态语言:运行之前必须先编译,编译不过就运行不了,运行时不能修改代码
给对象添加属性 : 15行会报错,因为类并没有添加属性
给类添加属性: 第17行的操作,不会报错
class Person(object):
def __init__(self, newName, newAge):
self.name = newName
self.age = newAge
def eat(self):
print("-----%s正在吃----"%self.name)
def run(self):
print("-----%s正在跑----"%self.name)
p1 = Person("p1", 10)
p1.eat()
p1.run = run
p1.run()#虽然p1对象中 run属性已经指向了10行的函数,,,但是这句代码还不正确
#因为run属性指向的函数 是后来添加的,几p1.run()的时候,并没有把p1当做第
#1个参数,导致了第10行的函数调用的时候, 出现缺少参数的问题
#调用的时候: (只写函数名,不能写函数加括号,加上括号就会运行函数)
types.MethodType(run,p1)
p1.run()
为对象添加属性和方法相当于绑在了他的身上. 上面的p1.eat 相当于给p1又定义了一个属性
上面是给一个实例对象添加 实例方法,下面是静态方法 :
类方法:
=================================
__slots__ 的作用 : 规定和限制能够 动态添加的属性