Python进阶笔记(5)_ 继承

本文介绍了Python中类的继承概念,通过实例演示了如何创建基类和派生类,并展示了多态性的应用。此外,文章还解释了如何使用isinstance()函数进行类型判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类的继承指的是在已有的类上增加新的类。比如,假设你想要写一个程序来记录学校之中的教师和学生情况。他们有一些共同属性,比如姓名、年龄和地址。他们也有专有的属性,比如教师的薪水、课程和假期,学生的学号和成绩。也就是说姓名、年龄和地址为共同的类,而薪水、课程为教师独有的类,学号和成绩为学生独有的类。那么就可以先建立一个共同的类SchoolMember,包含姓名、年龄和地址属性,然后为老师建立一个 Teacher 类,包含薪水、课程等属性,为学生建立一个 Student 类,包含学号和成绩等属性。Teacher 和 student 都是从 SchoolMember 中继承出来的,这样二者也就包含了 姓名、年龄和地址等属性。

具体可以先看看下例:

# Filename : inherit_test.py

class SchoolMember:
    '''Represents any school member.'''
    def __init__(self, name, age):
        self.name = name
        self.age  = age
        print '(Initialized SchoolMember:%s)' %self.name

    def tell(self):
        '''Tell the details.'''
        print 'Name:"%s", Age:"%s"' %(self.name, self.age)

class Teacher(SchoolMember):
    '''Represents a teacher'''
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self,name,age)
        self.salary = salary
        print '(Initialized Teacher: %s)' %self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Salary: "%d"' %self.salary
        print # prints a blank line
 
class Student(SchoolMember):
    '''Represents a student'''
    def __init__(self, name, age, marks, score):
        SchoolMember.__init__(self,name,age)
        self.marks = marks
        self.score = score
        print '(Initialized Student: %s)' %self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Marks:"%d", Score:"%d"' %(self.marks,self.score)


teachers = Teacher('Pro. Phoenix', 33, 50000)
students = Student('Tree', 23, 2120130992, 98)

print # prints a blank line

members = [teachers, students]
for member in members:
    member.tell()

输出为


这里,我们继承的书写方式是 

SchoolMember.__init__(self,name,age)

还有一种方式是

super(Teacher, self).__init__(name, gender)

判断类型

可以通过 函数isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型。

例如我们对上例的基础上再做如下判断:

peopple  = SchoolMember('Someone',30)

print isinstance(peopple,SchoolMember)
print isinstance(peopple,Teacher)
print isinstance(peopple,Student)

print isinstance(teachers,SchoolMember)
print isinstance(teachers,Teacher)
print isinstance(teachers,Student)

print isinstance(teachers, object)

输出为

True
False
False


True
True
False


True

多态和多重继承

第一个例子中,有一个 tell()在父类和子类里都出现了。这种表达称为多态。一个子类型在任何需要父类型的场合可以被替换成父类型,即对象可以被视作是父类的实例,这种现象被称为多态现象。

class Person(object):
    pass

class Student(Person):
    pass

class Teacher(Person):
    pass

class SkillMixin(object):
    pass

class BasketballMixin(SkillMixin):
    def skill(self):
        return 'basketball'

class FootballMixin(SkillMixin):
    def skill(self):
        return 'football'

class BStudent(Student, BasketballMixin):
    pass

class FTeacher(Teacher, FootballMixin):
    pass

s = BStudent()
print s.skill()

t = FTeacher()
print t.skill()

上例多重继承可以用下图表示





















### Python 进阶学习笔记总结 Python 是一种功能强大且灵活的语言,其进阶学习涵盖了多个重要主题。以下是基于提供的参考资料整理的 Python 进阶学习笔记的主要内容: #### 一、内置常用型及方法 Python 提供了许多内置的数据型和方法,这些是日常开发的基础[^1]。了解如何有效使用它们可以显著提高程序效率。 #### 二、常用数据型 分为两部分介绍: - **上篇**:主要包括列表、字典等基本操作[^2]。 - **下篇**:深入探讨集合和其他复杂结构的操作方式。 #### 三、高效迭代器工具 通过 `itertools` 和其他模块的学习,能够更高效地处理大规模数据集。 #### 四、异步 IO 随着并发需求的增长,理解并应用异步编程模型变得尤为重要。Python 中的 `asyncio` 库提供了强大的支持[^5]。 #### 五、多线程编程 多线程技术允许程序在同一时间执行多项任务。虽然 GIL(全局解释锁)限制了一些场景下的性能提升,但在 I/O 密集型任务中仍然非常有用[^6]。 #### 六、互联网支持 网络爬虫、HTTP 请求库如 `requests` 的使用技巧以及 RESTful API 设计原则均属于此范畴[^7]。 #### 七、面向对象高级编程 继承、封装、多态之外还有许多特性值得探索,比如描述符(descriptor),元(metaclass)[^8]。 #### 八、IO 编程 文件读写只是冰山一角;缓冲区管理、标准输入输出重定向等内容同样值得关注[^9]。 #### 九、一般加密支持 安全始终是一个热点话题,在实际项目里经常需要用到哈希算法或者对称/非对称加密方案[^3]。 #### 十、日志支持 良好的日志记录习惯有助于排查问题和维护系统稳定性。 #### 十一、数据压缩与归档 当涉及到大数据量传输或存储优化时,掌握 zlib、gzip 等模块就显得格外必要[^12]。 #### 十二、浅拷贝 vs 深拷贝 对于复杂的嵌套结构来说,仅仅复制顶层引用可能不够全面,此时就需要考虑采用深拷贝策略[^4]。 ```python import copy a = [[1, 2], [3, 4]] b = copy.deepcopy(a) # 创建完全独立的新副本 print(b is a) # False 表明两者位于不同位置 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值