系统函数的重写
- __str__:在调用print打印对象的时候,会被自动调用,默认返回的对象的地址【给程序员使用的】
- __repr__:在Python解释器中调用的方法【给计算机使用的】
#系统函数的重写 class Animal(object): def __init__(self,name,age,height): self.name = name self.age = age self.height = height #__str__:获取一个对象的字符串表示形式 def __str__(self): return "%s-%d-%f" % (self.name,self.age,self.height) #注意:如果在直接访问对象的时候,想要获取对象相关的成员变量的值,则直接重写__str__函数 def __repr__(self): return "hello" #创建对象【实例化对象】 a = Animal("大黄",10,40.0) print(a) #大黄-10-40.000000 print(a.__str__()) #大黄-10-40.000000 print(a.__repr__()) #hello print(a.name,a.age,a.height) #大黄 10 40.0
总结:
__str__和__repr__都未被重写的时候,直接访问对象默认调用的是__str__,但是此时__str__和__repr__返回的都是对象的地址
__str__和__repr__都被重写的时候,直接访问对象默认调用的是__str__,返回的是和成员有关的字符串
__str__被重写,__repr__未被重写,直接访问对象调用的是__str__
__repr__被重写,__str__未被重写,直接访问对象调用的是__repr__
自定义函数的重写
- 自定义函数的重写:将父类中需要被重写的函数的实现部分重新实现一次
#自定义函数的重写 #父类 class Animal(object): def run(self): print("animal running-----") #子类 class Cat(Animal): def run(self): print("cat running-----") class Dog(Animal): pass #子类中的函数将父类中的函数覆盖掉【就近原则】 c = Cat() c.run() #cat running----- 子类中的run d = Dog() d.run() #animal running----- 父类中的run
注意:当一个父类有多个子类的时候,如果其中的某个子类调用父类中的函数,发现满足不了需求,则需要进行重写。但是,其他的子类还可以调用父类中的函数