- 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)子类实现了父类中相同的方法(方法名、参数),在调用该方法时,实际调用的是子类的方法。(变化点重写)