day16回顾

文件
文本文件(内部全都存文字信息)
't' 自动用'utf-8'进行自动编解码
二进制文件(可以存声音,文字等信息)
'b'
文件操作步骤:
三步:
1. 打开文件
2. 读写文件
3. 关闭文件
打开:
open(文件名, 模式字符串)
读:
F.read([字节数或字符数])
F.readline()
F.readlines()
写:
F.write(字节串或字符串)
F.writelines(字节串或字符串列表)
关闭:
F.close()
设置或得到文件读写位置:
F.seek(偏移量, 起始位置)
F.tell()
清空缓冲区:
F.flush()

汉字编码:
二种:
GB系列(GB18030(GBK(GB2312)))
UNICODE系列(UNICODE32(UNICODE16))
'UTF-8'

编码字符串:
'gbkb2312', 'gbk', 'gb18030', 'utf-8', 'ascii'
编码注释:
# -*- coding:utf-8 -*-

新的一天,面向对象编程 Object-Oriented Programming

什么是对象
对象(object)是指现实中的物体或实体

什么是面向对象
把一切看成对象(实例),用各种对象之间的关系来描述事物

对象都有什么特征
对象有很多属性(名词,形容词)
姓名,年龄,性别,肤色
对象有很多行为(动作,动词):
学习,吃饭,睡觉,踢球,工作,借钱

什么是类(class)
拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具,用类可以创建此类的对象(实例)

示意:
车(类) -----> BYD E6(京A.88888) 实例,对象
\
\--> BMW X5(京B.00000) 实例,对象

狗(类) ----> 小京巴(户籍号: 000001)
\
\---> 导盲犬(户籍号: 000002)

int(类) ----> 100
\
\---> 200

### 类的创建语句,class 语句
语法:
class 类名(继承列表):
‘类的文档字符串’
实例方法的创建
类变量的创建
类方法的创建
静态方法的创建
作用:
创建一个类
类用于描述对象的行为和属性
类用于创建此类的一个或多个对象(实例)
说明:
继承列表可以省略,省略继承列表表示类继承自object类
示例见:
```
class Dog:
pass
dog1 = Dog() # 创建一个Dog类的实例
print(id(dog1)) # dog1这个对象的内存地址
dog2 = Dog() # 创建另一个Dog类的实例
print(id(dog2))
lst1 = list()
print(id(lst1))
lst2 = list()
print(id(lst2))

```

构造函数
构造函数的调用表达式:
类名([创建传参列表])
作用:
创建这个类的实例对象,并返回此实例对象的引用关系


实例方法(intance method)
语法:
class 类名(继承列表):
def 实例方法名(self, 参数1, 参数2, ...):
'''文档字符串'''
语句块
作用:
用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
说明:
实例方法的实质是函数,是定义在类内的函数
实例方法至少有一个形参,第一个形参绑定调用这个方法的实例,
一般命名为'self'

实例方法的调用语法:
实例.实例方法名(调用传参)

类名.实例方法名(实例,调用传参)

示例见:
instance_method.py

实例属性 attribute (也叫实例变量)

每个实例都可以有自己的变量,称为实例属性

语法:
实例.属性名
属性的赋值规则
首次为属性赋值则创建此属性
再次为属性赋值则改变属性的绑定关系
作用:
记录每个对象自身的数据
示例见:
attribute.py

练习:
定义一个'人'类
class Human:
def set_info(self, name, age, address='不详'):
'''此方法用来给人对象添加'姓名', '年龄',
'家庭住址'属性
'''
... # 此处自己实现

def show_infos(self):
'此处显示此人self的信息'
... # 此处自己实现
h1 = Human()
h1.set_info('小张', 20, '北京市东城区')
h2 = Human()
h2.set_info('小李', 18)
h1.show_infos() # 小张 今年 20 岁,家庭住址: 北京市东城区
h1.show_infos() # 小李 今年 18 岁,家庭住址: 不详

删除实例属性

del 语句
语法:
del 对象.实例属性名
示例:
class Dog:
pass

dog1 = Dog()
dog1.color = '白色'
dir(dog1)
del dog1.color # 删除属性



初始化方法:
作用:
对新创建的对象添加属性
语法格式:
class 类名(继承列表):
def __init__(self[, 形参列表]):
语句块
注: []代表其中的内容可省略
说明:
初始化方法名必须为 __init__ 不可改变
初始化方法会在构造函数创建实例后自动调用,且将实例自身通过
第一个参数self传入 __init__ 方法
构造函数的实参将通过 __init__方法的参数列表传入到
__init__方法中
初始化方法内如果需要返回,则必须返回None

### 析构方法
语法:
class 类名(继承列表):
def del(self):

作用:
在对象销毁前释放资源
说明:
析构方法在对象被销毁前被自动调用
python语言建议不要在对象销毁时做任何事情,因为销毁的
时间难以确定
示例见:
```
class Car:
def init(self, info):
self.info = info
print(“汽车”, info, ‘被创建!’)
# self.file = open(‘xxx.txt’) # 打开

def __del__(self):
'''析构方法不能有其它形参'''
print('汽车', self.info, '对象被销毁')
# self.file.close() # 关闭文件


c1 = Car('BYD F3')
L = [1, 2, 3]
L.append(c1)
del c1

s = input("程序暂停.请输入回车键继续... ")
# while True:
# pass

print("程序结束!!!")
```

预置实例属性:

__dict__属性
__dict__属性绑定一个存储此实例自身属性的字典

示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__) # {}
dog1.kinds = '哈士奇'
print(dog1.__dict__) # {'kinds': '哈士奇'}

class 属性

__class__属性绑定创建此实例的类

作用:
可以借助于此属性来访问创建此实例的类
示例:
class Dog:
pass

dog1 = Dog() # 创建一个对象
print(Dog) # Dog绑定一个类
print(dog1.__class__)
dog2 = dog1.__class__() # 创建一个与dog1同类的对象
print(dog2) # <__main__.Dog .... at 0x....>

用于类的函数

isinstance(obj, class_or_tuple)  返回这个对象obj
是否是某个类的对象或某些类中一个类的对象,如果是返回True,
否则返回False
type(obj) 返回对象的类
示例:
x = 100
y = [1, 2, 3, 4]
isinstance(x, int) # True
isinstance(y, int) # False
isinstance(x, (float, str, list)) # False
isinstance(x, (float, str, list, int)) # True
type(100) is int # True