python动态语言的特性
-
给对象添加属性
class Person(object): def __init__(self,new_name,new_age): self.name = new_name self.age = new_age laowang = Person("老王",18) print(laowang.name) print(laowang.age) laowang.addr = "北京" print(laowang.addr) laozhao = Person("老赵",20) Person.num = 100 print(laozhao.num) print(laowang.num) # 运行结果 老王 18 北京 100 100
-
给对象添加方法
import types class Person(object): def __init__(self,new_name,new_age): self.name = new_name self.age = new_age t = Person("老王",18) def eat(self): print("----%s正在吃----"%self.name) #t.eat = eat #t.eat()#虽然t对象中 ect属性已经指向了9行的函数,,,但是这句代码还是不正确 #因为run属性指向的函数 是后来添加的,及t.eat()的时候,并没有把t当做 #第一个参数,导致了第9行调用的时候,出现缺少参数的问题 #第一个参数是函数 第二个参数是实列 t.eat = types.MethodType(eat,t) #把eat函数 变成t这个实列的方法 t.eat() #还有种方法 t.eat = eat t.eat(t) #把t传递给了self 这时候self指向了这个实列 @staticmethod def test(): print("----staticmethod----") #添加静态方法 Person.test = test Person.test() @classmethod def printNum(cls): print("----classmethod----") #添加静态方法 Person.printNum = printNum Person.printNum() # 运行结果 ----老王正在吃---- ----老王正在吃---- ----staticmethod---- ----classmethod----
-
__slots__
的作用class Person(object): __slots__ = ("name","age") #类的实列只能添加 name属性 和age属性 添加别的直接报错 p = Person() p.name = "老王" p.age = 18 print(p.name) print(p.age) # 运行结果 老王 18