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。
- Berkeley's SICP in python3(五)
- Berkeley's SICP in python3(二)
- Berkeley's SICP in python3(三)
- Berkeley's SICP in python3(四)
- Berkeley's SICP in python3(六)
- Berkeley's SICP in python(一)
- What's New in Python3.0
- What's New in Python3.0
- What's new in Python3.0
- sicp in python
- sicp in python 资源
- A beginner's note on berkeley db
- Berkeley DB in kernel for linux-3.13
- sicp
- SICP
- [工具]Trie in python3
- Install Python3 in Linux
- Python3网络爬虫(五):Python3安装Scrapy
- [leetcode 139]Word Break
- SAP 供应商寄售业务的标准流程
- Java相等性测试
- POJ 3620 Avoid The Lakes 深搜DFS 附翻译 WA原因
- StartIO例程
- Berkeley's SICP in python3(五)
- cocos2d-x 音效
- button,ListView
- Flume:构建高可用、可扩展的海量日志采集系统——互动出版网
- SAP CO模块权限控制
- Spark官方Blog:SequoiaDB与Spark深度整合
- spring aop 如何切面到mvc 的controller
- eclipse 常用快捷键
- Invalid proguard configuration file path D:\...\proguard.cfg does not exist or is not a regular fil