Python面向对象
类和方法
对象object,实例instance
属于某个类的一个具体个体
类class
对同一类事物共同属性特征和能做事的概括 类名大写开头
类变量
属于某一个类的自己的变量
work(self)定义的时候
必须有,调用的时候不能传
1 定义类: 2 class 类名: 3 ....属性 4 ....方法 5 ....def 方法名(self,....): 6 #【第一个参数默认self,定义时必须有,调用不用传,是当前类的对象】
类定义完不调用,不会执行,类内方法需要通过对象调用
生成对象
通过构造方法生成。 类名(.....)
实例变量
属于对象他自己的属性
1 zs = Ren() 2 zs.work() 3 zs.name='zhangsan' 《《《《 4 print(zs.name)
没有实例方法
构造方法/构造函数
生成对象必会调用构造方法
-
- 方法名是固定的 __init__
- 通过类名调用,即Ren()就调用
- 不能写return语句,默认返回对象
- 定义类时,若没有构造,系统默认创建
1 class Ren: 2 ....def __init__(self,a): 3 ....print('‐‐‐helloworld‐‐‐') 4 5 zs=Ren(asfasaf) # 传到a里面
继承
子类继承父类
1 class BlackPerson(Ren,Animal): 2 ....color='black' 3 ....def run(self): 4 ........print('‐‐‐‐‐run fast‐‐‐‐‐')
子类间不能互相调用,没有关系
子类可以继承多个父类
注意避免逻辑混乱,相互继承,或既是父类又是父类的父类
高内聚,能复用尽可能复用
低耦合,能拆开尽可能拆开
继承尽量避免超过3代
构造函数的继承
子类有用子类的
同时继承多个父类,用先继承的
父类还有父类,向上追溯
都没有,系统创建
同名属性的继承
同上,都没有就报错
同名函数的继承
override覆盖、overwrite重写:子类有父类同名的属性方法,方法名相同,参数也相同
overloading 重载:子类有父类同名的方法,方法名相同,参数不同
super(类1,对象1)
对象1调用类1的父类属性,方法
1 super(Ren,bp).run()
身份运算符is
通过判断存储id相同
isinstance(对象1,类1)
判断对象1是否是类1的对象,是返回True否返回False
isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
1 >>>a = 2 2 >>> isinstance (a,int) 3 True 4 >>> isinstance (a,str) 5 False 6 >>> isinstance (a,(str,int,list)) # 是元组中的一个返回 True 7 True
issubclass(类1,类2)
判断类1是否是类2的子类,是返回True否返回False
private
__开头,私有的,有效范围在class内部,出了class边界,类对象子类对象都不能调用
protected
_开头,受保护的,不建议跨文件包调用,但是from...import* 出错
模块
调用:
本文件调用:
方法名(....参数值....)
跨文件调用:
1 #########[法1]######### 2 import 包1.包2.包3....文件名 3 包1.包2.包3....文件名.方法名(....参数值....) 4 #########[法2]######### 5 from 包1.包2.包3....文件名 import 方法名【*:代替所有方法名】 6 方法名(....参数值....)
常用方法 :
1 import time 2 time.strftime("%Y‐%m‐%d %H:%M:%S",time.localtime()) 3 %Y # 4位年 4 %y # 2位年 5 %m # 月 6 %d # 日 7 %H # 24小时制小时 8 %I # 12小时制小时 9 %M # 分 10 %S # 秒 11 time.sleep(数字) 12 # 当前进程休眠 数字 秒
1 import calendar 2 calendar.isleap(年): 判断年是否是闰年,如果是返回True,否则返回False
1 import random 2 random.randint(数字1,数字2):生成 》=数字1,《=数字2的整数的一个随机数
数据的读取
1 import pymysql 2 ###创建连接 host:数据库地址,user:用户,passwd:密码,db:数据库名 3 conn=pymysql.connect(host='localhost',user='root',passwd='',db='test1') 4 cursor=conn.cursor()
1 #通过游标执行sql语句,返回影响条数 2 ###增加一条 3 cursor.execute('update student set s_name=\'qingcai\' where s_id=1') 4 conn.commit() 5 6 ###返回查询结果 条数 7 aa=cursor.execute('select * from student') 8 print(aa) 9 ###返回查询结果一条 10 bb=cursor.fetchone() 11 print(bb) 12 ###返回查询结果多条 13 cc=cursor.fetchmany(2) 14 print(cc) 15 ###返回查询所有条 16 dd=cursor.fetchall() 17 print(dd) 18 19 ###关闭游标 20 cursor.close() 21 ###关闭连接 22 conn.close()