继承,派生,组合

1 .继承

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

1 class People:
2     pass
3 class Animal:
4     pass
5 class Student(People,Animal):#people ,Animal 是父类(基类),Student是子类(派生类)
6     pass
7 print(Student.__bases__)#(<class ‘__main__.People‘>, <class ‘__main__.Animal‘>)
8 print(People.__bases__)#(<class ‘object‘>,)
9 print(Animal.__bases__)#(<class ‘object‘>,)
__base__是查看从左到右继承的子类,__bases__是查看继承的父类#在Python中,所有的类默认继承object,#但凡是继承了object的子类,以及给子类的子类,都称为新式类#Python3中都是新式类#没有继承object的子类都是经典类,(在Python2中,没有继承object的类,以及它的类,都是经典类)

2,父类属性的引用
#Teacher是People的子类,继承是 什么 是 什么 的关系, Teacher是People的子类
 
class People:  ##Teacher是People的子类,继承是 什么 是 什么的关系, Teacher是People的子类
    def __init__(self,name,age,sex):
        self.name=name  #是子类Teacher和Student共有的数据属性
        self.age=age
        self.sex=sex
    def foo(self):    #是子类Teacher和Student共有的函数属性
        print(‘from father %s‘ %self.name)
    def walk(self):
        print(‘%s is walking‘%self.name)

class Teacher(People):
    school=‘oldboy‘
    def __init__(self,name,age,sex,salary,leverl):
        People.__init__(self,name,age,sex)   #引用父类的数据属性

        self.salary=salary  #加上自己特有的数据属性
        self.level=leverl
    def teacher(self):
        print(‘%s is teache‘%self.name)
    def foo(self):
        People.foo(self)   #是加上了People的函数属性
        print(‘from teacher‘)

class Student(People):
    def __init__(self,name,age,sex,group):
        People.__init__(self,name,age,sex)
        self.group=group
    def study(self):
        print(‘%s is studyinng‘%self.name)

t=Teacher(‘egon‘,12,‘male‘,1111,100)
print(t.name,t.age,t.salary,t.level)#egon 12 1111 100
t.foo()  #from father egon   from teacher      #实例化Teacher对象的他,引用了函数属性,同时引用了父类的函数属性
s=Student(‘alex‘,12,‘mail‘,‘a‘)
print(s.__dict__[‘name‘]) print(s.__dict__[‘age‘])

3.组合的使用

##Teacher 和Student的共有生日类,但不是继承关系,是 什么 有 什么 的关系,是Teacher有Data

组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合

 1 #===============================老师,学生都有生日时间,用到组合
 2
 3 class Date:  #Teacher 和Student的共有生日类,但不是继承关系,是 什么 有 什么 的关系,是Teacher有Data的关系
 4     def __init__(self,year,mon,day):
 5         self.year=year
 6         self.mon=mon
 7         self.day=day
 8     def tell_birth(self):
 9         print(‘出生于<%s>年 <%s>月 <%s>日‘%(self.year,self.mon,self.day))
10
11 class Teacher:
12     def __init__(self,name,age,year,mon,day):
13         self.name=name
14         self.age=age
15         self.birth=Date(year,mon,day)  #birth=Date(year,mon,day)  就是在实例化对象,对象是birth,从类Data里开始实例化
16
17     def teach(self):
18         print(‘%s is teaching ‘%self.name)
19
20 class Student:
21     def __init__(self,name,age,year,mon,day):
22         self.name=name
23         self.age=age
24         self.birth=Date(year,mon,day)
25     def study(self):
26         print(‘%s is studying‘%self.name)
27
28 t=Teacher(‘egon‘,12,1990,2,2)
29 print(t.name,t.age)  #egon 12
30 print(t.birth)#<__main__.Date object at 0x000001FD59B903C8>
31 t.birth.tell_birth()#  调用了Data的函数属性  出生于<1990>年 <2>月 <2>日
				
时间: 2024-10-09 06:00:47

继承,派生,组合的相关文章

Python开发基础-Day18继承派生、组合、接口和抽象类

类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承object类的子类成为经典类(在python2中,没有继承object的类,以及它的子类,都是经典类) 1 class People: 2 pass 3 class Animal: 4 pass 5 class Student(People,Animal): #People.Animal称为基类或父类,

python基础之继承派生、组合、接口和抽象类

类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承object类的子类成为经典类(在python2中,没有继承object的类,以及它的子类,都是经典类) 1 class People: 2 pass 3 class Animal: 4 pass 5 class Student(People,Animal): #People.Animal称为基类或父类,

Python基础----继承派生、组合、接口和抽象类

类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承object类的子类成为经典类(在python2中,没有继承object的类,以及它的子类,都是经典类) 1 class People: 2 pass 3 class Animal: 4 pass 5 class Student(People,Animal): #People.Animal称为基类或父类,

c++ 类的继承派生

作者:张煜 这周上的c++课上老师讲了类的继承和派生,总觉得他讲的相当的不完整. 类的继承是利用已有的类来建立专用类的编程技术.从另一个角度来说,从已有的类(父类)产生一个新的子类,称为类的派生. 继承是面向程序设计中最重要的机制,它支持层次分类的观点.继承使得程序员可以在一个较一般的类的基础上很快地建立一个新类,而不必从零开始设计每个类,在现实世界中,许多实体或概念不是孤立的,它们具有共同的特征,但也有细微的差别,人们使用层次分类的方法来描述这些实体或概念之间的相似点和不同点.如下图:    

继承和组合、抽象类和接口

继承和组合的使用原则: 1.很多资料中提到的一点,如果两个类之间是is-a的关系,那么就使用继承,而如果是has-a的关系就使用组合. 但是这也不是代表is-a是使用继承的绝对理由,有时候为了消除继承关系带来的耦合,使用组合可以更好的实现封装细节. 如果在一个系统中大量应用继承,继承层次深了,那么会给系统的开发和维护带来困难. 2.无论何时,如果你使用继承,但是又不想向上转型,那么这个时候就应该慎重选择,只要有可能,就应该考虑使用组合来达 到自己的目的.因为组合在类的运行期间通过类的属性来改变类

Objective-C基础1:OC中类的继承和组合

1.类的定义和声明 OC中的类声明是以@interface开始@end结束. OC中的类定义以@implementation开始@end结束. OC中的方法声明: - (void) setName : (NSString*) strName;前面的短线-表示这是一个方法,(void)表示返回值, setName表示方法名称,(NSString*) StrName表示参数是NSString*类型,名称是strName,注意:()一定要加 OC中的成员变量定义在类声明的{}中,这一点跟方法声明不一样

继承派生产生的切割问题

1 #include <iostream> 2 #include <string> 3 using namespace std; 4 class people 5 { 6 public: 7 string name; 8 int age; 9 virtual void print(); 10 }; 11 12 class teacher:public people 13 { 14 public: 15 int wage; 16 virtual void print(); 17 18

继承&派生

一.什么是继承和派生 封装.继承.多态是C++的三个重要的特性.在面向对象的技术中强调软件的可重用性,而继承机制就是用来解决软件的重用问题.在C++中,所谓"继承"就是在一个已经存在的类的基础上建立一个新的类.已经存在的类成为基类或父类,新建立的类称为派生类或子类. 一个类从一个已有的类那里获得已有的特性,这种现象称为类的继承.通过继承,一个新建的子类从父类那里获得父类的特性.从另一角度说,从已有的类(父类)产生一个新的类(子类),称为类的派生.派生类继承类基的所有数据成员和成员函数,

[Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式在内存中存放对象: (1)为了追求最大的执行速度,对象的存储空间和生命周期可以在编写程序时确定,这可以通过将对象置于堆栈或者静态存储区域内来实现.这种方式牺牲了灵活性. (2)在被称为堆的内存池中动态地创建对象.在这种方式,知道运行时才知道对象需要多少对象,它们的生命周期如何,以及它们的具体类型.