Python 编程导论 Chapter 8 —— 类与面向对象编程


typora-copy-images-to: Python 编程导论

Python 编程导论 Chapter 8 —— 类与面向对象编程


  • 重点是面向对象编程的环境下使用类,面向对象编程的关键,是将对象看做是数据和可以在数据上执行的方法的集合
  • Python 的对象都有类型,定义了程序能够在这个对象上执行的操作

8.1 抽象数据类型与类

  • 抽象数据类型,是指由对象以及对象上的操作组成的集合,捆绑为一个整体,可以传递到程序的另一个部分,可以使用对象数据属性以及使用对象上的操作

  • 目的,使程序易于修改,控制程序复杂程度,两种机制可以完成这个任务:

    • 分解,使程序具有结构
    • 抽象,隐藏细节
  • Python语言中,使用实现数据抽象,以下是一个类定义,实现对整数集合的抽象:

class IntSet(object):
    """IntSet是一个整数集合"""
    # 关于实现的信息
    # 集合的值由一个整合组self.vals表示
    # 集合中的每个整数在self.vals中只出现一次
    def__init__(self):
        """创建一个空的整数集合"""
        self.vals = []
    
    def insert(self,e):
        if e not in self.vals:
            self.vals.append(e)
            
    def member(self,e):
        """假设e是整数
           如果e在self中,则返回True,否则返回False"""
        return e in self.vals
    
    def remove(self,e):
        """假设e是整数,从self中删除e
		  如果e不在self中,则抛出ValueError异常"""
        try:
            self.vals.remove(e)
        except:
            raise ValueError(str(e) + ' not found')
            
            
    def getMembers(self):
        """返回一个包含self中元素的列表
		  对元素不进行排序"""
        return self.vals[:]
    
    def __str__(self):
        """返回一个表示self的字符串"""
        self.vals.sort()
        result = ""
        for e in self.vals:
            result = result + str(e) + ","
        return '{' + result[:-1] + '}'
        
s = IntSet()
s.insert(3)
print(s.member(3))        

# 以上代码可以创建一个实例,并在这个IntSet中插入整数3,然后输出True
  • 类支持两种操作:

    • 实例化:创建类的实例 例如:s = IntSet()
    • 属性引用:通过点标记法访问与类关联的属性,如:s.member
  • Python 中的特殊方法名,__ init__,只要一个类被实例化,就会调用该类中定义的__ init __方法

  • 方法属性定义在类定义中,类被实例化后,实例属性才被创建

  • 数据属性被关联到类时,称其为类变量,数据属性被关联到实例时,将其称为实例变量

  • 表示不变性定义了数据属性中的哪个值对应着类实例的有效表示

8.1.1 使用抽象数据类型设计程序
  • 程序是类型的集合,替代以函数为中心的理念
  • 数据抽象一般会比单个函数包含更多功能
8.1.2 使用类记录学生与教师
  • 应该先仔细思考可能有用的抽象,是否有一种抽象可以覆盖学生、教授、职员的常用属性?
  • Python 标准库模块datetime,提供了很多创建和处理日期数据的方法
import datetime
class Person(object):
	def __init__(self, name):
		
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值