第一章 抽象数据类型和Python类

1.1 抽象数据类型是什么?

在程序的开发实践中,人们发现,仅有程序语法方面的抽象还远远不够,还需要考虑数据层面的抽象。
从使用者的角度:抽象数据类型就是程序实现的一个功能部件,这个部件在头部定义了它的接口。不要求你知道它的内部细节。
1.1.1 抽象数据类型的分类
在每种编程语言中都有其内置的数据类型,比如①python中就有bool,int,float.str等单一的数据类型,②list,tulpe,dict等组合数据类型。但是,在真正的程序实践中,这些是不够的,我们还可以③自定义一些抽象的数据类型。
1.1.2 抽象数据类型的具体内容

抽象的宗旨就是把使用与细节分开,只要属于这种类型,就可以抽象化某种动作。比如+,-,.的运算。一个抽象的数据类型应该有三种基本操作:1.构造操作:就是基于已有的变量通过已有的语法构造新的变量值。2.解析操作:比如从输入对象取小数部分出来 就是一个解析操作 。3.变动操作:就是修改数据,在创建该类型对象之后是否允许变动。基于这个可以把数据分为可变数据类型与不可变数据类型。


这个就是一个具体数据类型的具体内容:

有着与Python一样的结构,第一行就是定义新的数据类型“有理数类型”第二行是三种操作中的构造操作:由已知的数据类型构造出新的数据类型Rational(),第三行到第六行的运算构造,第七第八行是典型的解析操作,取得已有对象的新成分。

2.2 Python的类

上面讲了抽象数据类型的基本要素,如果要自行定义,比如在python里我们就要学习class面向对象的类的定义方法了。

类的基本语法:

class <类的名字>:

    方法体


通过一个实例:

# 定义类:
class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self, name, age):
    """初始化属性name和age"""
        self.name = name
        self.age = age
    def sit(self):
    """模拟小狗被命令时蹲下"""
        print(self.name.title() + " is now sitting.")
    def roll_over(self):
    """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")
 # 创建实例:
my_dog = Dog('willie', 6)

解释:

1.类里面的所有陈述都是以函数的来表现的,但是在类里面的函数不叫函数,叫方法。

2.我们注意到几乎每个类都会定义__init__(self,...) 这个方法称作是 初始化方法,它的作用是,通过已有的传入参数构造新的对象,用self.name = 变量 的形式。这种形式可以在类的实例当中供实例直接句点调用。像这样可通过实例访问的变量称为属性。注意:属性的赋值有两种方法,①参数传入②常数赋值。

3.self必须存在,只有它才可以把实例传给所有的方法,只有传给了所有的方法,才有了 实例.方法()的引用方式。

4.在基于类创建实例时,我们以   实例 = 类名 +  __init __行的(参数1,参数2)注意:self''不写'',自动传递。

5.类的定义可以放在主程序里面,也可以单独成立.py文件。在实际工程中,往往就是单独成立文件,用import导入 主程序应用。

6.类里面的私有变量(只允许在类的内部访问的变量):1.__变量名 2.__init__,__add__等都是python自带的函数名或变量名。

2.3  python类的继承

父类(基类)与子类(派生类)的关系:子类可以看作是父类的一种特殊情况。它继承父类的所有属性与方法。

比如:class My_str(str):

              pass

子类就直接继承类str字符串的所有属性。

issubclass 检查两个类是否有继承关系: issubclass(My_str,str) 返回布尔值。

2.31  继承的实例与理解继承

# 父类:
class Dog:
    def __init__(self,参数1,参数2...):
        self.name = 参数1
         .....

# 子类:
class Littledog(Dog):   # Dog 传入这个类的头部括号,表示继承Dog父类
    def __init__(self,参数1,参数2,...)  # 像普通的类一样先初始化方法(大方向不变)另外:这里的self还是传入实例的
        super().__init__(参数1,参数2)  # 派生类特有,表示把父类的所有属性方法都拿过来用
        增加新的属性与方法                 #曲折之后回归

完结。


猜你喜欢

转载自blog.csdn.net/tommy1295/article/details/80663681