第1个:面向对象基础
1、python 支持 函数式 + 面向对象 编程
2、函数式编程实现发送邮件功能
1 def mail (mail,message):2 print ("发送")3 returnTrue4
5 mail("lalala", "好")6 -------------------------------
7 面向对象:类,对象8 #创建类9 classfoo:10 #方法11 def mail (self,mail,message):12 print ("发送")13 returnTrue14 #创建对象15 obj =foo()16 #通过对象执行方法17 obj.mail("lalala", "好")
第2个:面向对象编程和函数式编程对比
创建类,类里边是方法
创建对象
对象调用类里的方法
函数式:
1 def fetch(host,usernam,password,sql):2 pass3 def create(host,usernam,password,sql):4 pass5 def remove(host,usernam,password,sql):6 pass7 remove(127.0.0.1,sa,sa,select * from user;)
面向对象:
1 classsqlhelp:2 def fetch(self,host,usernam,password,sql):3 pass4 def create(self,host,usernam,password,sql):5 pass6 def remove(self,host,usernam,password,sql):7 pass8 obj =sqlhelp()9 obj.fetch(.......)10 --------------------------------------------
11 classsqlhelp:12 def fetch(self,sql):13 pass14 def create(self,sql):15 pass16 def remove(self,sql):17 pass18 obj =sqlhelp()19 #把host,usernam,pwd封装到对象里20 obj.host="127.0.0.1"
21 obj.usernam="lala"
22 obj.pwd="lalala"
23
24 obj.fetch("select * from user")25 !#方法中的self就相当于obj定义的host,usernam,pwd三个值
什么时候用面向对象?
有共同的参数,且将参数值一次性封装到对象,以后在对象中取值
第3个:面向对象中对象和类的关系
self是什么鬼?
self是一个python自动会给传值的参数
那个对象执行方法,self就是谁!
第4个:面向对象之构造方法
1 classsqlhelp:2
3 def __init__(self):4 print("自动执行init")5
6 def fetch(self,sql):7 pass8
9 obj = sqlhelp() #创建对象=类名() ,在方法中自动执行一个init函数10 -------------------------------------------
11 classsqlhelp:12
13 def __init__(self,a1,a2,a3):14 print("自动执行init")15 self.host=a116 self.user=a217 self.pwd=a318
19 def fetch(self,sql):20 pass21
22 obj = sqlhelp("xietong.live","sa","123456")23 obj.fetch("select * from user")
类中有一个特殊的方法init,类() 自动被执行。
init方法为 构造方法!
第5个:面向对象之应用场景实例
1 classperson:2 def __init__(self,name,age,money):3 self.name=name4 self.age=age5 self.money=money6
7 def shop(self):8 self.money=self.money-2
9
10 la= person("hk",26,1000)11 la.shop()12 print(la.money)
面向对象三大特性:封装、继承、多态(python没有意义)
上边的例子为特性之一的:封装。
第6个:面向对象之对象中封装对象
自带类:str,list,dict,tuple,set
自定义类:
class foo:
def bar(self):
pass
1 classc1:2 def __init__(self,name,obj):3 self.name=name4 self.obj=obj5 classc2:6 def __init__(self, name, age):7 self.name =name8 self.age =age9 def show(self):10 print(self.name)11
12 c2_obj = c2("aa",11)13 print(c2_obj.name)14 print(c2_obj.age)15 c1_obj = c1("kk",c2_obj)16 print(c1_obj.name)17 print(c1_obj.obj.age) #c1_obj.obj = c2_obj
第7,8个:面向对象之对象中封装对象2,3
1 classc1:2 def __init__(self,name,obj):3 self.name=name4 self.obj=obj5 classc2:6 def __init__(self, name, age):7 self.name =name8 self.age =age9 def show(self):10 print(self.name)11
12 classc3:13 def __init__(self,money,aaa):14 self.money =money15 self.aaa=c1_obj16
17
18 c2_obj = c2("aa",11)19 print(c2_obj.name)20 print(c2_obj.age)21
22 c1_obj = c1("kk",c2_obj)23 print(c1_obj.name)24 print(c1_obj.obj.age) #c1_obj.obj =c2_obj25
26 c3_obj = c3(1000,c1_obj)27 print(c3_obj.aaa.obj.name) #c3_obj.aaa =c1_obj28 #c3_obj.aaa.obj =c2_obj29 #c2_obj.name =a30 print(c3_obj.aaa.obj.show()) #返回为None,因为方法中没有返回值
第9,10个:面向对象之单继承
1、可以多继承。
2、继承是把上边的东西拿下来。
3、如果本类中存在,自己的优先执行。
1 classf1: #父类、基类2 def show(self):3 print("show")4 def foo(self):5 print(self.name)6 classf2(f1): #子类、派生类7def __init__(self,name):8 self.name =name9
10 def bar(self):11 print("bar")12
13 def show(self):14 print("f2show")15
16 obj=f2("alex")17 obj.foo()18 #print(obj.show())
----------------------------------
重要!阅读源码会经常用到。
1 classs1:2 def f1(self):3 self.f2()4 def f2(self):5 pass6
7 classs2(s1):8 def f3(self):9 self.f1()10 '''11 def f1(self):12 self.f2() #拷贝的s1里的f1.self等于obj=s2,执行自己的f213 '''14 def f2(self):15 print(123)16
17 #obj =s1()18 #obj.f1() #执行s1里的f1、f219
20 obj =s2()21 obj.f3() #执行s2里的f3,把s1里的f1拿下来了,再执行本类中的f2,输出结果为123
第11,12个:面向对象之多继承
1 classc0():2 def f2(self):3 print(12)4
5 classc1(c0):6 def f0(self):7 print(123)8
9 classc2():10 def f2(self):11 print("c2")12
13 classc3(c1,c2): #继承关系左边的优先级高14 def f3(self):15 print(67)16
17 obj =c3()18 obj.f2()