标准输入输出文件:
标准输入文件 sys.stdin
标准输出文件 sys.stdout 就是输出 相当于 print()
标准错误输出 sys.stderr
模块名:sys
说明:每一个python程序启动后都会有以上三个文件已经打开供我们使用
示例:
###sys.stdin.read(num) 就是输入 相当于 input() num代表读取最大字符数
###这个方法如果num不存在的情况下,需要文件结束符,Linux下是Ctrl+D
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
面向对象编程:
类 class 和 对象 object
什么是对象:
对象是指现实中的物体或者实例
什么是面向对象:
把一切看成对象(实例),对象和对象之间用方法(行为)建立关联关系
什么是类:
把拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具
类的创建语法:
class 类名(继承列表):
"""类文档字符串"""
实例方法(类内的函数method)的定义
类变量(class variable)定义
类方法(@classmethod)定义
静态方法(@staticmethod)定义
类的作用:
可以用类创建一个或多个此类的对象(实例)
类内的变量和方法能够被此类所创建的所有实例共同拥有
说明:
类名必须是标识符(与变量命名规则相同,建议首字母大写)
类名实质上就是变量,他绑定一个类实例
类的定义最后边要加上两个空行,以告诉解释执行器,类的定义已经结束
示例:
class Dog:
pass
术语:
类 对象 实例
class object instance
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
构造函数:
构造函数:
构造函数的调用表达式:
类名([创建传参列表])
[]里的内容代表可以省略
作用:创建这个类的实例对象,并返回此实例对象的引用关系
示例:
class Dog:
pass
dog1 = Dog() # 用类来创建一个对象,用dog1绑定
print(id(dog1)) # 打印dog1所在的内存地址
dog1 = Dog() # 用类创建另外一个对象,用dog2绑定
print(id(dog1))
print(dog1 is dog2) # 判断两只狗是不是同一条狗
实例说明:
实例有自己的作用域或名字空间,可以为该实例添加实例变量(属性)
实例也可以调用类的方法
实例可以访问类中的变量
实例变量(属性 attribute)
每个实例可以有自己的变量,称为实例变量(属性)
属性的使用方法:
实例.属性名
属性的赋值规则:
(同变量规则相同)
1.首次为属性赋值则创建此属性
2.再次为属性赋值则改变属性的绑定关系
示例:
class Dog:
pass
dog1 = Dog()
dog1.kinds = '京巴' # 为dog1 绑定的实例添加kinds属性
dog1.color = '白色' # 继续添加
print(dog1.kinds,dog1.color) # 访问属性
dog1.color = '黄色'
print(dog1.color)
注:用dir(dog1) 查看dog1绑定的所有变量(属性)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
写一个student类,对象属性:name,age,score,用来保存三者。
1)写一个函数
input_student读入n个学生的信息,用对象来储存字啊写信息(不用字典)
并返回对象的列表。
2)写一个函数output_student打印这些学生信息(格式不限)
示意: class Student:
pass
def input_stu():
...
def output_stu(lst):
# 打印学生信息
def main():
L = input_stu()
output_stu(L)
main()
删除属性:
del语句
语法: del 对象.属性名
示例:
class Student()
pass
stu = Student()
stu.name = 'xiaozhang'
print(stu.name)
del stu.name # 删除此属性
print(stu.name) # 属性错误,因为属性不存在了
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
实例方法: method
语法:
class 类名(继承列表):
def 实例方法名(self,参数1,参数2,....)
语句块
作用:
用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
说明:
实例方法的实质是函数,是定义在类内的函数
实例方法的第一个参数代表调用这个方法的实例,一般命名为‘self’
实例方法的调用语法:
实例.实例方法名(调用参数)
或
类名.实例方法名(实例,调用参数)
例子:
class Dog:
"""docstring for Dog"""
def eat(self, food):
"""小狗有能够吃东西的行为"""
print('小狗吃了',food)
self.food = food
____# 为self绑定的对象添加food属性来记录狗吃的东西,
____# self.food这里的food是为self添加的属性,后边的food是一个传参
____# 这个属性只有调用了此函数的实例对象才会拥有。
def sleep(self,hour):
print('小狗睡了',hour,'小时')
def food_info(self):
"""能否在此方法内得到小狗上次吃的食物是什么"""
print('上次吃的是:....',self.food)
dog1 = Dog() # 创建一个实例对象
dog2 = Dog()
dog1.eat('骨头') # 让狗吃东西
dog1.sleep(1) # 让狗睡觉
# 另一种方法
Dog.food_info(dog1)
Dog.food_info(dog2)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
初始化方法:
作用:
对新创建的对象添加属性等必须的资源
语法:
class 类名:
def __init__(self[,参数列表]):
语句块
[] 代表其中内容可以省略
说明:
初始化方法名必须为__init__不可改变
初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self
传入__init__方法
构造函数的实参将通过__init__方法的参数列表传到__init__方法中
初始化方法内如果需要return语句返回,则必须返回None
示例:426test3.py
析构方法:
语法:
class 类名:
def __del__(self):
语句块
作用:
在对象被销毁之前被"""""自动"""""调用,主要负责清理对象所占用的资源。
说明:
python建议尽可能少的在析构方法内做事情,因为销毁时间难以确定。
如果删除了一个实例对象,但是后边还需要运行很久,__del__不一定会在删除对象
之前运行,导致之前的程序未运行完成(__del__内的部分)
示例:
class FileManage:
'''定义一个文件管理员类'''
def __init__(self,filename='xxx.py'):
self.file = open(filename,'w')
def writeline(self,string):
self.file.write(string)
self.file.write('\n')
def __del__(self):
'''析构方法会在对象被销毁前自动调用'''
self.file.close()
print('文件已关闭')
fm = FileMange()
fm.writeline('hello world')
fm.writeline('这是中文第二行')
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
预置的实例属性:
__dict__属性:
用于绑定一个储存此实例自身变量的字典
__class__属性:
用于绑定创建此实例自身变量的字典
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__)
dog1.color = 'white'
print(dog1.__dict__)
print(dog1.__class__)
用于类的函数:
isinstance(obj,class_or_tuple)
返回对象的类
例如:
>>> class A:
... pass
...
>>> a = A()
>>> isinstance(a,A)
True
>>> isinstance(a,int)
False
>>> isinstance(a,(A,int))
True
>>> isinstance(a,(str,int))
False
>>> type(a)
<class '__main__.A'>
标准输入文件 sys.stdin
标准输出文件 sys.stdout 就是输出 相当于 print()
标准错误输出 sys.stderr
模块名:sys
说明:每一个python程序启动后都会有以上三个文件已经打开供我们使用
示例:
###sys.stdin.read(num) 就是输入 相当于 input() num代表读取最大字符数
###这个方法如果num不存在的情况下,需要文件结束符,Linux下是Ctrl+D
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
面向对象编程:
类 class 和 对象 object
什么是对象:
对象是指现实中的物体或者实例
什么是面向对象:
把一切看成对象(实例),对象和对象之间用方法(行为)建立关联关系
什么是类:
把拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具
类的创建语法:
class 类名(继承列表):
"""类文档字符串"""
实例方法(类内的函数method)的定义
类变量(class variable)定义
类方法(@classmethod)定义
静态方法(@staticmethod)定义
类的作用:
可以用类创建一个或多个此类的对象(实例)
类内的变量和方法能够被此类所创建的所有实例共同拥有
说明:
类名必须是标识符(与变量命名规则相同,建议首字母大写)
类名实质上就是变量,他绑定一个类实例
类的定义最后边要加上两个空行,以告诉解释执行器,类的定义已经结束
示例:
class Dog:
pass
术语:
类 对象 实例
class object instance
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
构造函数:
构造函数:
构造函数的调用表达式:
类名([创建传参列表])
[]里的内容代表可以省略
作用:创建这个类的实例对象,并返回此实例对象的引用关系
示例:
class Dog:
pass
dog1 = Dog() # 用类来创建一个对象,用dog1绑定
print(id(dog1)) # 打印dog1所在的内存地址
dog1 = Dog() # 用类创建另外一个对象,用dog2绑定
print(id(dog1))
print(dog1 is dog2) # 判断两只狗是不是同一条狗
实例说明:
实例有自己的作用域或名字空间,可以为该实例添加实例变量(属性)
实例也可以调用类的方法
实例可以访问类中的变量
实例变量(属性 attribute)
每个实例可以有自己的变量,称为实例变量(属性)
属性的使用方法:
实例.属性名
属性的赋值规则:
(同变量规则相同)
1.首次为属性赋值则创建此属性
2.再次为属性赋值则改变属性的绑定关系
示例:
class Dog:
pass
dog1 = Dog()
dog1.kinds = '京巴' # 为dog1 绑定的实例添加kinds属性
dog1.color = '白色' # 继续添加
print(dog1.kinds,dog1.color) # 访问属性
dog1.color = '黄色'
print(dog1.color)
注:用dir(dog1) 查看dog1绑定的所有变量(属性)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
写一个student类,对象属性:name,age,score,用来保存三者。
1)写一个函数
input_student读入n个学生的信息,用对象来储存字啊写信息(不用字典)
并返回对象的列表。
2)写一个函数output_student打印这些学生信息(格式不限)
示意: class Student:
pass
def input_stu():
...
def output_stu(lst):
# 打印学生信息
def main():
L = input_stu()
output_stu(L)
main()
删除属性:
del语句
语法: del 对象.属性名
示例:
class Student()
pass
stu = Student()
stu.name = 'xiaozhang'
print(stu.name)
del stu.name # 删除此属性
print(stu.name) # 属性错误,因为属性不存在了
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
实例方法: method
语法:
class 类名(继承列表):
def 实例方法名(self,参数1,参数2,....)
语句块
作用:
用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
说明:
实例方法的实质是函数,是定义在类内的函数
实例方法的第一个参数代表调用这个方法的实例,一般命名为‘self’
实例方法的调用语法:
实例.实例方法名(调用参数)
或
类名.实例方法名(实例,调用参数)
例子:
class Dog:
"""docstring for Dog"""
def eat(self, food):
"""小狗有能够吃东西的行为"""
print('小狗吃了',food)
self.food = food
____# 为self绑定的对象添加food属性来记录狗吃的东西,
____# self.food这里的food是为self添加的属性,后边的food是一个传参
____# 这个属性只有调用了此函数的实例对象才会拥有。
def sleep(self,hour):
print('小狗睡了',hour,'小时')
def food_info(self):
"""能否在此方法内得到小狗上次吃的食物是什么"""
print('上次吃的是:....',self.food)
dog1 = Dog() # 创建一个实例对象
dog2 = Dog()
dog1.eat('骨头') # 让狗吃东西
dog1.sleep(1) # 让狗睡觉
# 另一种方法
Dog.food_info(dog1)
Dog.food_info(dog2)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
初始化方法:
作用:
对新创建的对象添加属性等必须的资源
语法:
class 类名:
def __init__(self[,参数列表]):
语句块
[] 代表其中内容可以省略
说明:
初始化方法名必须为__init__不可改变
初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self
传入__init__方法
构造函数的实参将通过__init__方法的参数列表传到__init__方法中
初始化方法内如果需要return语句返回,则必须返回None
示例:426test3.py
析构方法:
语法:
class 类名:
def __del__(self):
语句块
作用:
在对象被销毁之前被"""""自动"""""调用,主要负责清理对象所占用的资源。
说明:
python建议尽可能少的在析构方法内做事情,因为销毁时间难以确定。
如果删除了一个实例对象,但是后边还需要运行很久,__del__不一定会在删除对象
之前运行,导致之前的程序未运行完成(__del__内的部分)
示例:
class FileManage:
'''定义一个文件管理员类'''
def __init__(self,filename='xxx.py'):
self.file = open(filename,'w')
def writeline(self,string):
self.file.write(string)
self.file.write('\n')
def __del__(self):
'''析构方法会在对象被销毁前自动调用'''
self.file.close()
print('文件已关闭')
fm = FileMange()
fm.writeline('hello world')
fm.writeline('这是中文第二行')
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
预置的实例属性:
__dict__属性:
用于绑定一个储存此实例自身变量的字典
__class__属性:
用于绑定创建此实例自身变量的字典
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__)
dog1.color = 'white'
print(dog1.__dict__)
print(dog1.__class__)
用于类的函数:
isinstance(obj,class_or_tuple)
返回这个对象obj是否是某个类的对象,或者是某些类中的一个类的对象,如果是则返回True,
如果不是则返回False
type(obj)返回对象的类
例如:
>>> class A:
... pass
...
>>> a = A()
>>> isinstance(a,A)
True
>>> isinstance(a,int)
False
>>> isinstance(a,(A,int))
True
>>> isinstance(a,(str,int))
False
>>> type(a)
<class '__main__.A'>