日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

python笔记

發(fā)布時間:2024/8/26 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 python笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

python筆記 - day7-1 之面向?qū)ο缶幊?

什么時候用面向?qū)ο螅?/h4>

  多個函數(shù)的參數(shù)相同;
  當(dāng)某一些函數(shù)具有相同參數(shù)時,可以使用面向?qū)ο蟮姆绞剑瑢?shù)值一次性的封裝到對象,以后去對象中取值即可;

self是什么?    

  self是一個python自動會給傳值得參數(shù);     哪個對象執(zhí)行方法,self就是哪個對象;   
例:
class SQLHelper:
    def __init__(self,a1,a2,a3):
        print("自動執(zhí)行")
        self.hhost = a1
        self.uusername = a2
        self.pwd = a3

    def fetch(self,sql):
        print(self.hhost)
        print(self.uusername)
        print(self.pwd)
        print(sql)

    def create(self,sql):
        print(self.hhost)
        print(self.uusername)
        print(self.pwd)
        print(sql)

obj1 = SQLHelper('C1.SALT.COM','alex',123)
obj1.fetch("select * from A")
#如果SQLHelper后面加括號,表示執(zhí)行SQLHelper的__init__方法;
#obj1如果執(zhí)行了__init__方法,self就等于obj1
#如:
    def __init__(self,a1,a2,a3):
        print("自動執(zhí)行")
        obj1.hhost = a1
        obj1.uusername = a2
        obj1.pwd = a3


obj2 = SQLHelper('www.baidu.com','freddy',123)
obj2.create("create ........")
#obj2如果執(zhí)行了__init__方法,self就等于obj2
#如:
    def __init__(self,a1,a2,a3):
        print("自動執(zhí)行")
        obj2.hhost = a1
        obj2.uusername = a2
        obj2.pwd = a3

構(gòu)造方法:  

  類中有一個特殊的方法,__init__,類()自動執(zhí)行;   創(chuàng)建對象,后面加括號,表示遇到__init__方法,就執(zhí)行__init__方法;

面向?qū)ο螅筇匦裕骸 ?/h4>   封裝,繼承,多態(tài);

“函數(shù)式編程”,與“面向?qū)ο缶幊獭北容^:

函數(shù)式編程:使用函數(shù)式編程,如果執(zhí)行每個函數(shù),都要重新傳入?yún)?shù),比較麻煩:

def fetch(host,username,password,sql):
    pass
def create(host,username,password,sql):
    pass
def remove(host,username,pasword,uid):
    pass
def modify(host,username,password,name):
    pass

面向?qū)ο缶幊蹋嚎梢詣?chuàng)建一個對象,到時候想要執(zhí)行哪個方法,調(diào)用自己創(chuàng)建的對象即可;

class SQLHelper:
def fetch(self,sql): print(self.hhost) print(self.uusername) print(self.pwd) print(sql)
def create(self,sql): pass

def remove(self,uid): pass

def modify(self,name): pass #類里面的方法只能通過對象來調(diào)用 obj = SQLHelper() obj.hhost = "www.mysql.com" obj.uusername = "freddy" obj.pwd = '123' obj.fetch("select * from A")

標(biāo)準面向?qū)ο髮懛ǎ?/h3>
class SQLHelper:
    def __init__(self,a1,a2,a3):
        print("自動執(zhí)行")
        self.hhost = a1
        self.uusername = a2
        self.pwd = a3

    def fetch(self,sql):
        print(self.hhost)
        print(self.uusername)
        print(self.pwd)
        print(sql)

    def create(self,sql):
        print(self.hhost)
        print(self.uusername)
        print(self.pwd)
        print(sql)

#這里會把自定義的三個參數(shù),分別傳給fetch,create;
obj1 = SQLHelper('c1.salt.com','alex',123)

#調(diào)用上面創(chuàng)建的對象,并執(zhí)行額外的命令
obj1.fetch("select * from A")

#調(diào)用這個對象,執(zhí)行額外的命令
obj1.create("create database aaa")

取其它對象下面的值:

class c1:
    def __init__(self,name,obj):
        self.name = name
        self.obj = obj

class c2:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def show(self):
        print(self.name)
        
c2_obj = c2('aa',11)
c1_obj = c1("alex",c2_obj)

# - 取出來c2_obj下的age是多少?
# - c2_obj賦值給c1_obj了,先打印c1_obj,
# - c2_obj賦值給c1_obj下的obj了,再打印c1_obj.obj,相當(dāng)于打印的c2_obj
# - 最后再c2_obj里面取出age的值即可

print(c1_obj.obj.age)

類之前的方法調(diào)用,三個類:

class c1:
def __init__(self,name,obj):
self.name = name
self.obj = obj

class c2:
def __init__(self,name,age):
self.name = name
self.age = age

def show(self):
print(self.name)
# return 123

class c3:
def __init__(self,a1):
self.money = 123
self.aaa = a1

#如何使用C3類,調(diào)用c2類下的show方法?
c2_obj = c2('freddy',11)
#c2_obj是c2類型
# - name = 'aa'
# - age = 11

c1_obj = c1("alex",c2_obj)
#c1_obj是c1類型
# - name = "alex"
# - obj = c2_obj
c3_obj = c3(c1_obj)
#使用c3_obj找到c2下的name
print(c3_obj.aaa.obj.age)

#使用c3_obj執(zhí)行show方法
ret = c3_obj.aaa.obj.show()
print(ret)

繼承:

class F1:
    def show(self):
        print('show')

    def foo(self):
        print(self.name)

class F2(F1):
    def __init__(self,name):
        self.name = name

    def bar(self):
        print('bar')
    def show(self):
        print('F2.show')

#F2類下找不到foo方法,就繼續(xù)去F1下找foo方法,因為F2類繼承了F1類;
#繼承就相當(dāng)于把父類的內(nèi)容,在子類中創(chuàng)建了一份;
#子類可以繼承父類,父類不能繼承子類;
obj = F2('alex')
obj.foo()

#F1和F2類里面都有show方法,這里創(chuàng)建對象是F2的類,優(yōu)先調(diào)用F2類下的show方法
obj = F2('alex')
obj.show()

面向?qū)ο笾畣卫^承:

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()
#這里執(zhí)行的是S2下的F2

obj = S1()
obj.F1()
#這里執(zhí)行的是S1下的F2

面向?qū)ο笾嗬^承,繼承都是從底層開始找:

方法一:最簡單的多繼承,通過C3繼承了C2,C1,通過C3類,可以執(zhí)行C2,C1里面的方法

class C1:
    def f1(self):
        print("f1")

class C2:
    def f2(self):
        print("f2")

class C3(C2,C1):
    def f3(self):
        print("f3")

obj = C3()
obj.f1()
obj.f2()
obj.f3()

方法二:一條道,走到黑,如果父類只有一個子類,就是先去子類找,找不到再往右找;

    查找順序:C3.f2(沒有) → C1.f2(沒有) → C0.f2(有,執(zhí)行),沒有就執(zhí)行C2.f2

class C0:
    def f2(self):
        print("C0.F2")

class C1(C0):
    def f3(self):
        print("C1.F3")

class C2:
    def f2(self):
        print("C2.f2")

class C3(C1,C2):
    def f3(self):
        print("f3")
obj = C3()
obj.f2()

結(jié)果:C0.F2

方法三:如果一個父類,有兩個子類,執(zhí)行順序:

    C3.f2(沒有) → C1.f2(沒有) → C0.f2(沒有,就不往上找了) → C3.f2(回到原點,沒有) → C2.f2(有,執(zhí)行)

class C_2:
    def f2(self):
        print("C-2,F2")

class C_1(C_2):
    def f2(self):
        print("C_1.F2")
class C0(C_2):
    def f3(self):
        print("C0.F2")

class C1(C0):
    def f3(self):
        print("C1.F3")
class C2(C_1):
    def f2(self):
        print("C2.f2")

class C3(C1,C2):
    def f3(self):
        print("f3")

obj = C3()
obj.f2()

看源碼必須要懂這個原理:

執(zhí)行:obj = A()

   obj.forever()

A → process() → __init__ 【找到init了,obj = A()執(zhí)行完了,回到原點,開始執(zhí)行obj.forever() 】

A → process() → __init__ → __init__ , run(),process() → forever()【找到了,執(zhí)行這個方法】

執(zhí)行:self.run()

  A → process() → __init__ → __init__ , run()【找到了,執(zhí)行這個方法】

執(zhí)行:self.process()

  A → process(),【找到了,執(zhí)行這個方法】

這個模塊源碼,就是引用了上面的方法:

import socketserver

#加括號,是個函數(shù)執(zhí)行這個函數(shù),
# 是個類,執(zhí)行init方法
obj = socketserver.ThreadingTCPServer()

obj.serve_forever()

總結(jié)

以上是生活随笔為你收集整理的python笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。