面向对象: 类,对象
函数放在类里,叫方法
封装
#如何调用
1. 创建对象, 类名()
obj= Foo()
2. 通过对象去执行方法
obj.mail("leon@me.com","NB")
----------------创建-------------------
a.创建类
class 类名:
def 方法名(self,xxxx):
pass
b. 创建对象
对象 = 类名()
c. 通过对象执行方法
对象.方法名(123)
-----------------创建--------------------
创建对象时候,有一个类对象指针指向类
对象是由类创建的,对象执行方法的时候就会根据类对象指针去类里面找到这个方法并且去执行
对象.xxx=(ooo) 就是把 xxx赋值到对象里面 相当于在对象里写了 xxx=ooo
==>什么时候用面向对象?当某一些函数具有相同的参数时,可以用面向对象方式,将参数一次性的封装到对象,以后去对象中取值即可
self是什么鬼:
self是一个python自动会给传值的形式参数
哪个对象执行方法,self就是谁
obj1.fetch("select * from tableA") -->self=obj1
obj1.fetch("select * from tableA") --> self=obj2
class SQLHelper:
def fetch(self,sql):
print(sql)
def create(self,sql):
pass
def remove(self,nid):
pass
def modify(self,name):
pass
obj1 = SQLHelper()
obj1.hhost ="pt1.zuora.com"
obj1.uusername="leon"
obj1.pwd="" obj1.fetch("select * from tableA") obj2 = SQLHelper()
obj2.hhost ="pt1.zuora.com"
obj2.uusername="leon"
obj2.pwd="" obj2.fetch("select * from tableA")
__init__ (构造方法)
类中有一个特殊的方法,在类()时候就会执行
class SQLHelper:
def __init__(self,a1,a2,a3):
print("自动执行")
self.hhost= a1
self.uusername = a2
self.pwd = a3
def fetch(self,sql):
print(sql)
def create(self,sql):
pass
def remove(self,nid):
pass
def modify(self,name):
pass
obj1 = SQLHelper("pt1.nb.com","leon","") obj1.fetch("select * from tableA") obj2 = SQLHelper("pt2.nb.com","gary","") obj2.fetch("select * from tableA")
(传参可取的方法)
继承
父类,基类
子类,派生类
class F1: #父
pass
class F2(F1): #子
pass
注意:
* 类优先执行自己的方法
继承就是把父类的东西拿过来,如果相同的话,自己的优先级最高
单继承:
每一次找的时候。涉及到self.xxx,回到起点找。子类里面没有就去父类里面找,父类里没有就去父父里找
class S1: def F1(self):
self.F2() def F2(self):
pass class S2(S1): def F3(self):
self.F1() def F2(self):
pass obj = S2()
obj.F3()
单继承
多继承:
括号左边优先级高 #class C3(C2,C1)
寻找顺序: 左到右,
没有共同的父类,左纵深再右纵深(撞南墙再回来lol)
有共同的父类,到临顶端之前缩回去,去右边找