import types
# 定义类
class Person(object):
num = 0
def __init__(self, name, age=None):
self.name = name
self.age = age
def eat(self):
print('eat food')
# 定义实例方法
def run(self, speed):
print("{} 在移动,速度是{}".format(self.name, speed))
# 定义类方法
@classmethod
def testClass(cls):
cls.num = 100
# 定义静态方法
@staticmethod
def testStatic():
print('--static method--')
# 创建实例
P = Person('老王', 24)
# 调用在class中的方法
P.eat()
# 给这个对象添加实例方法
# 错误写法:
# P.run = run(180) #TypeError: run() missing 1 required positional argument: 'speed'
# 正确写法, 可以直接给这个类绑上方法, 或者是用types.MethodType(run, P)给实例绑上方法
# Person.run = run
# p2 = Person('小李', 25)
# p2.eat()
# p2.run(30)
# p3 = Person('校长', 30)
# p3.run(300)
P.run = types.MethodType(run, P)
P.run(180)
# 给Person 类绑定类方法
Person.testClass = testClass
# 调用类方法
print(Person.num)
Person.testClass() # 后面都修改了
print(Person.num)
p2 = Person('lili', 22)
print(p2.num)
# 给Person 绑定静态方法
Person.testStatic = testStatic
Person.testStatic()
#
# 运行的过程中删除属性、方法
# 删除的方法:
#
# del 对象.属性名
# delattr(对象, “属性名”)
# 通过以上例子可以得出一个结论:相对于动态语言,静态语言具有严谨性!所以,玩动态语言的时候,小心动态的坑!
#
# 那么怎么避免这种情况呢? 请使用slots,
eat food
老王 在移动,速度是180
0
100
100
--static method--