Berkeley's SICP in python3(五)

本文介绍了面向对象编程的基本概念,包括类和对象的定义、实例化、属性和方法的使用,以及类属性、继承和多重继承等内容。

上面讲到了序列和可变的数据,比如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.balance
0

这种“调用“创造了类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.age
20
>>> b.age
20
>>> People.age = 15
>>> a.age
15
>>> b.age
15
>>> b.age = 10    #创建了一个新的实例属性,与存在属性同名,不受全局属性约束
>>> People.age = 5
>>> a.age
5
>>> b.age
10

5.5继承

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

5.6多重继承

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

6实现类和对象

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

6.1 实例

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值