python继承和反射
继承
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
self.sleep()
def sleep(self):
print("Animal sleep ...")
def eat(self):
print("Animal eat ...")
class Dog(Animal):
pass
Dog("旺财", 3)
- 注意Animal的__init__方法中的self.sleep函数会首先调用Dog类中重新的sleep方法,这里被注释掉了,进而调用父类中的sleep方法。
反射
class Animal:
def __init__(self, name, age, func_str):
self.name = name
self.age = age
func = getattr(self, func_str)
func()
def sleep(self):
print("Animal sleep ...")
def eat(self):
print("Animal eat ...")
class Dog(Animal):
def sleep(self):
print("Dog sleep ...")
Dog("旺财", 3, func_str="sleep")
- 注意getattr函数会先充子类寻找指定的func_str函数名,子类没会从父类中寻找,直到超类(基类object)缺失则报错。