【1.106】面向对象 继承
比较官方的说法就是:
继承(英语:inheritance)是面向对象软件技术当中的一个概念。
如果一个类别 son “继承自”另一个类别 father,就把这个 son 称为“ father 的子类别”,
而把 father 称为“ son 的父类别” 也可以称 “father 是 son 的超类”。
继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。
在定义 子类别 继承 父类别 的同时,可以重新定义某些属性,并重写某些方法,
即 覆盖从父类别继承来的 原有属性和方法,使其获得与父类别不同的功能。
注意不是覆盖父类的属性和方法。
另外,为子类别追加新的属性和方法也是常见的做法。
一般静态的面向对象编程语言,继承属于静态的,意即在子类别的行为在编译期就已经决定,无法在执行期扩充。
字面意思就是:
子承父业,合法继承家产,就是如果你是独生子,
而且你也很孝顺,不出意外,你会继承你父母所有家产,他们的所有财产都会由你使用(败家子儿除外)。
但是要注意和现实中的父子关系 稍有差别 有些东西是父亲的就是父亲的,有些东西你是继承 不来的
程序语言的 继承是完全继承的
class Animal: ''' 动物父类 ''' def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex class Dog(Animal): '''狗类''' pass class Cat(Animal): '''猫类''' pass
继承的优点也是显而易见的:
1,增加了类的耦合性(耦合性不宜多,宜精)。
2,减少了重复代码。
3,使得代码更加规范化,合理化。
--------------------------------------------------------------------------------------------------------------
就向上面的例子:
Aminal 叫做父类,基类,超类。
Cat Dog: 子类,派生类。
继承:可以分单继承,多继承。
这里需要补充一下python中类的种类(继承需要):
在python2x版本中存在两种类.:
⼀个叫经典类. 在python2.2之前. ⼀直使⽤的是经典类. 经典类就是基类的根什么都不写.
⼀个叫新式类. 在python2.2之后出现了新式类. 新式类的特点是基类的根是object类。
python3x版本中只有一种类:
python3中使⽤的都是新式类. 如果基类谁都不继承. 那这个类会默认继承 object
class Aniaml(object): type_name = '动物类' def __init__(self,name,sex,age): self.name = name self.age = age self.sex = sex def eat(self): print(self) print('吃东西') # c1=Aniaml("cat","male",1) # print (c1.eat(1111)) Aniaml.eat(222) #类访问方法 # 222 # 吃东西 class Cat(Aniaml): pass class Dog(Aniaml): pass # 类名: print(Dog.type_name) # 可以调用父类的属性,方法。 动物类 Dog.eat(111) # 111 吃东西 类访问方法 print(Dog.type_name) # 动物类 # 对象: # 实例化对象 p1 = Cat('春哥','男',18) print(p1.__dict__) # {'name': '春哥', 'age': 18, 'sex': '男'} # 对象执行类的父类的属性,方法。 print(p1.type_name) # 动物类 p1.type_name = '666' print(Aniaml.type_name) # 动物类 print(p1.type_name) # 666 print(p1) # <__main__.Cat object at 0x00000000027A5710> p1.eat() # 对象访问方法 # <__main__.Cat object at 0x00000000027A5710> # 吃东西
---------------
---------------
---------------
执行顺序 就是在类里面找,先找自己的类 然后再找父类
class Aniaml(object): type_name = '动物类' def __init__(self,name,sex,age): self.name = name self.age = age self.sex = sex def eat(self): print(self) print('吃东西') class Person(Aniaml): def eat(self): print('%s 吃饭'%self.name) class Cat(Aniaml): pass class Dog(Aniaml): pass p1 = Person('barry','男',18) # 实例化对象时必须执行__init__方法,类中没有,从父类找,父类没有,从object类中找。 p1.eat() # 先要执行自己类中的eat方法,自己类没有才能执行父类中的方法。 执行顺序
浙公网安备 33010602011771号