class 子类(父类):
def __init__(self,参数列表):
super().__init__(参数列表)
self.自身实例变量 = 参数
在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承足够,如下如所示:
# 定义一个父类,如下:
class Cat(object):
def __init__(self, name, color="白色"):
self.name = name
self.color = color
def run(self):
print("%s--在跑"%self.name)
# 定义一个子类,继承Cat类如下:
class Bosi(Cat):
def setNewName(self, newName):
self.name = newName
def eat(self):
print("%s--在吃"%self.name)
bs = Bosi("印度猫")
print('bs的名字为:%s'%bs.name)
print('bs的颜色为:%s'%bs.color)
bs.eat()
bs.setNewName('波斯')
bs.run()
代码跑起来
说明:
虽然子类没有定义__init__方法,但是父类有,所以在子类继承父类的时候这个方法就被继承了,所以只要创建Bosi的对象,就默认执行了那个继承过来的__init__方法
类自身 --> 父类继承列表(由左至右)–> 再上层父类
A
/ \
/ \
B C
\ /
\ /
D
Python中多继承的格式如下:
# 定义一个父类
class A:
def printA(self):
print('----A----')
# 定义一个父类
class B:
def printB(self):
print('----B----')
# 定义一个子类,继承自A、B
class C(A,B):
def printC(self):
print('----C----')
obj_C = C()
obj_C.printA()
obj_C.printB()
说明
优点:
<1> 一种代码复用的方式。
<2> 以层次化的方式管理类。
缺点:耦合度高
作用:隔离客户端代码与功能的实现方式。(抽象(代表)变化点,隔离用与做.)
适用性:多个类在概念上是一致的,且需要进行统一的处理。
父类(基类、超类)、子类(派生类)。
父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小。
单继承:父类只有一个(例如 Java,C#)。
多继承:父类有多个(例如C++,Python)。
Object类:任何类都直接或间接继承自 object 类。
isinstance(obj, class_or_tuple)
返回这个对象obj 是否是某个类的对象,或者某些类中的一个类的对象。
# 判断对象是否属于一个类型
print(isinstance(s01, Person)) # true
print(isinstance(s01, Teacher)) # false
print(isinstance(s01, (Person, Teacher))) # true
print(isinstance(s01, Student)) # true
# 判断一个类型是否属于另一个类型
print(issubclass(Teacher, Person)) # true
print(issubclass(Teacher, Student)) # false
print(issubclass(Person, Student)) # false
print(issubclass(Person, Person)) # true
# 如果判断父子
print(issubclass(Teacher, Person) and Teacher != Person) # true
print(issubclass(Teacher, Teacher) and Teacher != Teacher) # false
父类的同一种动作或者行为,在不同的子类上有不同的实现。(调用父类,执行子类.)
class Cat(object):
def __init__(self,name):
self.name = name
self.color = 'yellow'
class Bosi(Cat):
def __init__(self,name):
# 调用父类的__init__方法1(python2)
#Cat.__init__(self,name)
# 调用父类的__init__方法2
#super(Bosi,self).__init__(name)
# 调用父类的__init__方法3
super().__init__(name)
def getName(self):
return self.name
bosi = Bosi('xiaohua')
print(bosi.name)
print(bosi.color)
xiaohua
yellow
1.继承将相关概念的共性进行抽象,多态在共性的基础上,体现类型的个性化(一个行为有不同的实现)。
2.增强程序扩展性,体现开闭原则。
子类实现了父类中相同的方法(方法名、参数),在调用该方法时,实际调用的是子类的方法。(变化点重写。)
#coding=utf-8
class Cat(object):
def sayHello(self):
print("halou-----1")
class Bosi(Cat):
def sayHello(self):
print("halou-----2")
bosi = Bosi()
bosi.sayHello()
halou-----2
(1)分而治之
– 将一个大的需求分解为许多类,每个类处理一个独立的功能。 (类要小而精,拒绝大而全.)
– 拆分好处:便于分工,便于复用,可扩展性强。
(2) 封装变化
– 变化的地方独立封装,避免影响其他类。(分解的度,识别变化点,单独做成类.)
(3) 高 内 聚
– 类中各个方法都在完成一项任务(单一职责的类)。(类内部,高度聚集.完成一个变化点。)
(4) 低 耦 合
– 类与类的关联性与依赖度要低(每个类独立),让一个类的改变,尽少影响其他类。(类与类关系,尽量松散。)
(1)定义:重用现有类的功能,并在此基础上进行扩展。
(2)说明:子类直接具有父类的成员(共性),还可以扩展新功能。
(3)优点:一种代码复用的方式。
(4)缺点:耦合度高:父类的变化,直接影响子类。
(1)定义:父类的同一种动作或者行为,在不同的子类上有不同的实现。(调用父类,执行子类.)
(2)作用:
(3)子类实现了父类中相同的方法(方法名、参数),在调用该方法时,实际调用的是子类的方法。(变化点重写)