Berkeley's SICP in python3(五)

来源:互联网 发布:朴素贝叶斯算法 matlab 编辑:程序博客网 时间:2024/05/17 01:32

上面讲到了序列和可变的数据,比如tuple,list,dict,并用基本类型对它们进行的抽象实现。这一届主要讲OOP。

5面对对象程序

一个对象是指,并且有方法和属性,通过点号访问。

5.1对象和类

类是对象的模板,对象是类的一个实例。

5.2定义类

类的声明如下:

class <name> (<base class>):    <suite>

name是类的名字,可以选择继承一个类,suite处是类的属性和方法。
类有自己的构造函数__init__(),

class Account():    def __init__(self, account_holder):        self.balance = 0        self.holder = account_holder

构造函数两个参数,第一个参数self指向新创建的Account对象,代指自己。第二个参数是对象在实例化的时候进行使用。
实例化类:

>>> a = Account('Jim')>>> a.holder'Jim'>>> a.balance0

这种“调用“创造了类Account的一个实例a,同时用__init__()构造函数对其进行了初始化。
特性:每一个类都有自己属性。

>>> b = Account('Jack')>>> b.balance = 50>>> [n.balance for n in (a,b)][0, 50]

方法:每一个方法都包含一个特殊的参数self,当函数被调用时,指向当前对象。

class Account():    def __init__(self, account_holder):        self.balance = 0        self.holder = account_holder    def deposit(self, amount):        self.balance = self.balance + amount        return self.balance    def withdraw(self, amount):        if amount > self.balance:            return 'Insufficient funds'        self.balance = self.balance - amount        return self.balance

5.3消息传递和点号表达式

在一个类中,不同nonlocal语句也可以实现函数之间的数据使用。,因为都是在一个类的环境中。
点号表达式:用点号表达式可以求出属性值,用python内置函数也可以求出同样的值,就像求字典值一样。

>>> getattr(b,'balance')50>>> hasattr(b,'deposit')False>>> hasattr(b,'balance')True 

getattr:查看相应的值。 hasattr:查看是否有相应的属性和方法。

方法和函数:如下,作为类的一个属性,方法就是函数。而作为实例的属性,只是一个方法。

>>> type(Account.deposit)<class 'function'>>>> type(tom.deposit)<class 'method'>

有两种方式对方法deposit进行调用:

>>> Account.deposit(tom, 1001)1101>>> tom.deposit(1000)2101

5.4类属性

>>> class People():    age = 20>>> a = People()>>> b = People()>>> a.age20>>> b.age20>>> People.age = 15>>> a.age15>>> b.age15>>> b.age = 10    #创建了一个新的实例属性,与存在属性同名,不受全局属性约束>>> People.age = 5>>> a.age5>>> b.age10

5.5继承

代码重用,子类继承父类时,同时继承了属性和方法。当自乐调用子类不存在的属性或者方法时,向父类查找。

5.6多重继承

python中可以实现多重继承。
这里写图片描述

6实现类和对象

学习的一个重要过程就是用已存在的东西去解决未知的东西,前面已经实现过了tuple,list,dict。现在可以用字典和函数去实现类,达到了这样的一个功能。

6.1 实例

前面的dict是抽象数据类型,用list实现了dict,用pairs实现了list,用functions实现了pairs。

0 0
原创粉丝点击