继承
A类继承B类,A即可获得B类的全部公共属性和方法(包括内置属性和方法)。格式如:class A(B):
class Animal:
def sleep(self):
print("zZZ...") def eat(self):
print("yamiyami...") def run(self):
print("huchihuchi...") class Dog(Animal): #Dog类拥有sleep,eat,run,bark四个方法
def bark(self):
print("汪汪汪")
方法重写
子类有时需要对继承自父类的方法进行修改或重写,这时直接定义一个与需要重写的方法名一样的方法即可,如(接上面的代码):
class xiaotianquan(Dog):
def fly(self):
print("我在飞")
#重写继承自父类的bark()方法
def bark(self):
print("我在叫!我在叫!")
父类方法扩展
有时仅需对父类方法进行扩展无需完全重写,只需在重写方法时加上super().父类方法 即可:
class xiaotianquan(Dog):
#扩展继承自父类的bark()方法
def bark(self):
#继承父类的方法
super().bark() #此时super()即代表父类(此时的父类为Dog)
#需要拓展的代码
print("我在叫!我在叫!")
super类是一个特殊的类,super()代表着一个super类的实例
Python2.x版本调用父类方法(了解,不推荐)
在Python2.x版本中,子类重写或拓展父类方法时,不是使用super()调用,而是使用:父类名.父类方法(self) #注意,self不能省略
class xiaotianquan(Dog):
#扩展继承自父类的bark()方法
def bark(self):
#继承父类的方法
Dog.bark(self) #self不能省略
#需要拓展的代码
print("我在叫!我在叫!")
注意:super().方法名 与 父类名.方法名(self),开发中不能混用,只能使用一种,且推荐super().方法名这种
父类的私有属性和方法的调用
子类无法直接访问父类的私有属性(可以但不推荐),但可以通过父类中的公共方法来调用私有属性和方法:
class A:
def __init__(self):
self.__age = 18 def __fuck(self):
print("你不能搞我") def get_age(self):
return self.__age def force(self):
self.__fuck() class B(A):
def __init__(self):
super().__init__() #非常重要!!没有这行代码就没有继承自父类的_A__age属性
name = "xiaoli" xiaoli = B()
print(xiaoli.get_age())
xiaoli.force()
运行结果:
E:\python3\python3.exe F:/PycharmProjects/project3-class/xh_13_调用父类方法中的私有属性和方法.py
18
你不能搞我 Process finished with exit code 0