python面向对象之类的继承

python继承

继承:代码复用的高级抽象

  1. 继承是面向对象程序设计的精髓之一
  2. 实现了以类为单位的高抽象级别代码复用
  3. 继承是新定义类能够几乎完全使用原有类属性与方法的过程

派生类可以直接使用基类的属性和方法

  1. 基类的属性基本等同于定义在派生类中
  2. 派生类可以直接使用基类的类属性、实例属性
  3. 派生类可以直接使用基类的各种方法
  4. 使用基类的类方法和类属性时,要用基类的类名调用
class DemoClass:
	count=0
	def __init__(self,name):
		self.name=name
		DemoClass.count+=1
	def getName(self):
		return self.name
class HumanNameClass(DemoClass):
	def printName(self):
		return str(DemoClass.count)+self.name+'同志' #对基类类属性的使用
dc1=HumanNameClass("老王")
print(dc1.getName()) #对基类实例方法的使用
print(dc1.printName())#对派生类实例方法的使用
输出:
老王
1老王同志

派生类的约束

  1. 派生类只能继承基类的公开属性和方法
  2. 派生类不能继承基类的私有属性和私有方法

object类是python所有类的基类

  1. object是python最基础类的名字,不建议翻译理解
  2. 所有类定义时默认继承object类
  3. 保留属性和方法本质上是object类的属性和方法

重载:派生类对基类属性或方法的再定义

属性重载:派生类定义并使用了用基类相同名称的属性
方法重载:派生类定义并使用了与基类相同名称的方法

属性重载

class DemoClass:
	count=0
	def __init__(self,name):
		self.name=name
		DemoClass.count+=1
class HumanNameClass(DemoClass):
	count=99
	def __init__(self,name):
		self.name=name
		HumanNameClass.count-=1
	def printCount(self):
		return str(HumanNameClass.count)+self.name
dc1=HumanNameClass("老王")
print(dc1.printCount())
输出:
98老王

方法重载

分为完全重载和增量重载,完全重载就是在派生类中重写同名方法。
增量重载 用super()方法

class DemoClass:
	count=0
	def __init__(self,name):
		self.name=name
		DemoClass.count+=1
	def printCount(self):
		return str(DemoClass.count)+self.name
class HumanNameClass(DemoClass):
	def __init__(self,name):
		self.name=name
	def printCount(self):
		return super().printCount()+"同志"
dc1=HumanNameClass("老王")
print(dc1.printCount())
输出:
0老王同志

类的多继承

class DemoClass:
	def __init__(self,name):
		self.name=name
	def printCount(self):
		return self.name
class NameClass:
	def __init__(self,title):
		self.nick=title
	def printCount(self):
		return self.nick+'同志'
class HumanNameClass(NameClass,DemoClass): #继承是从左至右
	pass
dc1=HumanNameClass("老王")
print(dc1.printCount())
输出:
老王同志
class DemoClass:
	def __init__(self,name):
		self.name=name
	def printCount(self):
		return self.name
class NameClass:
	def __init__(self,title):
		self.nick=title
	def printCount(self):
		return self.nick+'同志'
class HumanNameClass(DemoClass,NameClass): #继承是从左至右
	def printCount(self):
		return super().printCount()+"你好"
dc1=HumanNameClass("老王")
print(dc1.printCount())
输出:
老王你好

你可能感兴趣的:(python,python,类,多态,面向对象编程,class)