亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python面向?qū)ο缶幊蹋ㄒ唬?/h1>
 更新時(shí)間:2022年05月30日 09:16:36   作者:springsnow  
本文詳細(xì)講解了Python的面向?qū)ο缶幊?,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Python面向?qū)ο缶幊蹋ㄒ唬?/a>

Python面向?qū)ο缶幊蹋ǘ?/a>

Python面向?qū)ο缶幊蹋ㄈ?/a>

和其它編程語(yǔ)言相比,Python 在盡可能不增加新的語(yǔ)法和語(yǔ)義的情況下加入了類機(jī)制。

Python中的類提供了面向?qū)ο缶幊痰乃谢竟δ埽侯惖睦^承機(jī)制允許多個(gè)基類,派生類可以覆蓋基類中的任何方法,方法中可以調(diào)用基類中的同名方法。

對(duì)象可以包含任意數(shù)量和類型的數(shù)據(jù)。

一、程序中定義類和對(duì)象

1、 定義類

定義函數(shù)時(shí),函數(shù)只檢測(cè)語(yǔ)法,不執(zhí)行代碼,但是定義類的時(shí)候,類體代碼會(huì)在類定義階段就立刻執(zhí)行,并且會(huì)產(chǎn)生一個(gè)類的名稱空間,也就是說(shuō)類的本身其實(shí)就是一個(gè)容器/名稱空間(__dict__),是用來(lái)存放名字的,這是類的用途之一。

語(yǔ)法格式如下:

class ClassName:
    
    .
    .
    .

類實(shí)例化后,可以使用其屬性,實(shí)際上,創(chuàng)建一個(gè)類之后,可以通過(guò)類名訪問(wèn)其屬性。

使用類名訪問(wèn)其屬性:

# 注意類中定義變量使用駝峰體
class OldboyStudent():
    school = 'oldboy'

    def choose_course(self):
        print('is choosing course')


print(OldboyStudent.__dict__)
# {'__module__': '__main__', 'school': 'oldboy', 'choose_course': , '__dict__': <attribute '__dict__' of 'OldboyStudent' objects>, '__weakref__': <attribute '__weakref__' of 'OldboyStudent' objects>, '__doc__': None}

print(OldboyStudent.__dict__['school'])
# oldboy


print(OldboyStudent.__dict__['choose_course'])
#


try:
    OldboyStudent.__dict__['choose_course']()
except Exception as e:
    print('error:', e)
# error: choose_course() missing 1 required positional argument: 'self'


print(OldboyStudent.school)
# oldboy


print(OldboyStudent.choose_course(111))
# is choosing course


print(OldboyStudent.choose_course)
#


OldboyStudent.country = 'China'
print(OldboyStudent.__dict__['country'])
# 'China'
delOldboyStudent.school
print(OldboyStudent.__dict__)
# {'__module__': '__main__', 'choose_course': , '__dict__': <attribute '__dict__' of 'OldboyStudent' objects>, '__weakref__': <attribute '__weakref__' of 'OldboyStudent' objects>, '__doc__': None, 'country': 'CHINA'}

2、 定義對(duì)象

調(diào)用類即可產(chǎn)生對(duì)象,調(diào)用類的過(guò)程,又稱為類的實(shí)例化,實(shí)例化的結(jié)果稱為類的對(duì)象/實(shí)例。

stu1 = OldboyStudent()  # 調(diào)用類會(huì)得到一個(gè)返回值,該返回值就是類的一個(gè)具體存在的對(duì)象/實(shí)例
print(stu1.school)  # oldboy

stu2 = OldboyStudent()  # 調(diào)用類會(huì)得到一個(gè)返回值,該返回值就是類的一個(gè)具體存在的對(duì)象/實(shí)例
print(stu2.school)  # oldboy

stu3 = OldboyStudent()  # 調(diào)用類會(huì)得到一個(gè)返回值,該返回值就是類的一個(gè)具體存在的對(duì)象/實(shí)例
stu3.choose_course()  # is choosing course

二、定制對(duì)象獨(dú)有特征

1、引入

對(duì)于上述的學(xué)生類,如果類的屬性改了,則其他對(duì)象的屬性也會(huì)隨之改變

class OldboyStudent():
    school = 'oldboy'

    def choose_course(self):
        print('is choosing course')


stu1 = OldboyStudent()
stu2 = OldboyStudent()

<strong>OldboyStudent.school</strong> = 'OLDBOY'
print(stu1.school)  # <strong>OLDBOY</strong>

print(stu2.school)  # OLDBOY

2、定制對(duì)象獨(dú)有特征

對(duì)象本質(zhì)類似于類,也是一個(gè)名稱空間,但是對(duì)象的名稱空間存放對(duì)象獨(dú)有的名字,而類中存放的是對(duì)象們共有的名字。

因此我們可以直接為對(duì)象單獨(dú)定制名字。

print(stu1.__dict__)  # {}
print(stu2.__dict__)  # {}

stu1.name = 'tank'
stu1.age = 18
stu1.gender = 'male'

print(stu1.name, stu1.age, stu1.gender)
# tank 18 male

try:
    print(stu2.name, stu2.age, stu2.gender)
except Exception as e:
    print(e)
# 'OldboyStudent' object has no attribute 'name'

stu2.name = 'sean'
stu2.age = 19
stu2.gender = 'female'

print(stu2.name, stu2.age, stu2.gender)
# sean 19 female

3、對(duì)象屬性查找順序

首先從自身查找,沒(méi)找到往類中找,類中沒(méi)有則會(huì)報(bào)錯(cuò)。即對(duì)象的屬性查找順序?yàn)椋鹤陨?mdash;>類—>父類—>報(bào)錯(cuò)。

class OldboyStudent:
    school = 'oldboy'
    count = 0
    aa = 10 #類的的公共變量aa


    def __init__(self, x, y, z):  # 會(huì)在調(diào)用類時(shí)自動(dòng)觸發(fā)
        self.name = x  # stu1.name='耗哥'
        self.age = y  # stu1.age=18
        self.sex = z  # stu1.sex='male'
        OldboyStudent.count += 1
        # self.count += 1
        self.aa = 1 #對(duì)象的私有變量aa

    def choose_course(self):
        print('is choosing course')


print(OldboyStudent.count)  # 0

stu1 = OldboyStudent('nick', 18, 'male')
print(stu1.count)  # 1

stu2 = OldboyStudent('sean', 17, 'male')
print(stu2.count)  # 2

stu3 = OldboyStudent('tank', 19, 'female')
print(stu3.count)  # 3

print(OldboyStudent.count)  # 3


# 由于上述修改的是類屬性,類屬性的count已經(jīng)被修改為3,所以其他實(shí)例的count都為3
print(stu1.count)  # 3
print(stu2.count)  # 3
print(stu3.count)  # 3

# 由于aa是私有屬性,因此stu們都會(huì)用自己私有的aa,不會(huì)用類的aa。count也不屬于對(duì)象
print(stu1.__dict__)  # {'name': 'nick', 'age': 18, 'sex': 'male', 'aa': 1}
print(stu2.__dict__)  # {'name': 'sean', 'age': 17, 'sex': 'male', 'aa': 1}
print(stu3.__dict__)  # {'name': 'tank', 'age': 19, 'sex': 'female', 'aa': 1}

4、類定義階段定制屬性

類有一個(gè)名為 __init__() 的特殊方法(構(gòu)造方法),該方法在類實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用。

調(diào)用類時(shí)發(fā)生兩件事:

  • 創(chuàng)造一個(gè)空對(duì)象
  • 自動(dòng)觸發(fā)類中__init__功能的執(zhí)行,將stu1以及調(diào)用類括號(hào)內(nèi)的參數(shù)一同傳入。
class OldboyStudent:
    school = 'oldboy'

    def __init__(self, name, age, gender):
        """調(diào)用類的時(shí)候自動(dòng)觸發(fā)"""
        self.name = name
        self.age = age
        self.gender = gender
        print('*' * 50)

    def choose_course(self):
        print('is choosing course')


try:
    stu1 = OldboyStudent()
except Exception as e:
    print(e)
# __init__() missing 3 required positional arguments: 'name', 'age', and 'gender'

stu1 = OldboyStudent('nick', 18, 'male')
# **************************************************


print(stu1.__dict__) 
# {'name': 'nick', 'age': 18, 'gender': 'male'} #沒(méi)有school

三、對(duì)象的綁定方法

  • 類名稱空間中定義的數(shù)據(jù)屬性和函數(shù)屬性都是共享給所有對(duì)象用的

  • 對(duì)象名稱空間中定義的只有數(shù)據(jù)屬性,而且是對(duì)象所獨(dú)有的數(shù)據(jù)屬性。

1、類使用對(duì)象的綁定對(duì)象

類中定義的函數(shù)是類的函數(shù)屬性,類可以使用它,但使用的就是一個(gè)普通的函數(shù)而已,意味著需要完全遵循函數(shù)的參數(shù)規(guī)則,該傳幾個(gè)值就傳幾個(gè)

class OldboyStudent:
    school = 'oldboy'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.sex = gender

    def choose_course(self):
        print(f'{self.name} choosing course')

    def func(self):
        print('from func')


print(OldboyStudent.choose_course)
# <function OldboyStudent.choose_course at 0x00000000023AEF70>

try:
    OldboyStudent.choose_course(123)
except Exception as e:
    print(e)
# 'int' object has no attribute 'name'

2、對(duì)象使用對(duì)象的綁定方法

  • 類中定義的函數(shù)是共享給所有對(duì)象的,對(duì)象也可以使用,而且是綁定給對(duì)象用的,

  • 綁定的效果:綁定給誰(shuí),就應(yīng)該由誰(shuí)來(lái)調(diào)用,誰(shuí)來(lái)調(diào)用就會(huì)將誰(shuí)當(dāng)作第一個(gè)參數(shù)自動(dòng)傳入。

類中定義的函數(shù),類確實(shí)可以使用,但其實(shí)類定義的函數(shù)大多情況下都是綁定給對(duì)象用的,所以在類中定義的函數(shù)都應(yīng)該自帶一個(gè)參數(shù)self。

self代表類的實(shí)例,而非類

類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱, 按照慣例它的名稱是 self,self 代表的是類的實(shí)例。

self 不是 python 關(guān)鍵字,我們把他換成 aaabbb也是可以正常執(zhí)行的:

class OldboyStudent:
    school = 'oldboy'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.sex = gender

    def choose_course(self):
        print(f'{self.name} choosing course')

    def func(self):
        print('from func')


stu1 = OldboyStudent('nick', 18, 'male')
stu2 = OldboyStudent('sean', 17, 'male')
stu3 = OldboyStudent('tank', 19, 'female')

stu1.choose_course() #相當(dāng)于 OldboyStudent.choose_course(stul) 對(duì)象調(diào)對(duì)象綁定的方法,會(huì)自動(dòng)傳參
# nick choosing course

stu2.choose_course()
# sean choosing course

stu3.choose_course()
# tank choosing course

stu1.func()
# from func
stu2.func()
# from func

四、類與數(shù)據(jù)類型

python3中統(tǒng)一了類與類型的概念,類就是類型

class Foo:
def __init__(self,name):
        self.name = name

f = Foo('name')

obj = Foo()
print(type(obj))
# <class '__main__.Foo'>


lis = [1, 2, 3] # 相當(dāng)于 lis = list([1,2,3])
print(type(lis))
# <class 'list'>
 
lis.append(4)  # 對(duì)象調(diào)對(duì)象綁定的方法,會(huì)自動(dòng)傳參
list.append(lis,4)  # 類調(diào)用對(duì)象綁定的方法,必須得傳參

對(duì)象其實(shí)就是一個(gè)高度整合的產(chǎn)物,整合數(shù)據(jù)與專門操作該數(shù)據(jù)的方法(綁定方法)

import pymysql

class Foo:
    def __init__(self, host, port, db, chartset):
        self.host = host
        self.port = port
        self.db = db
        self.charset = chartset

    def exc1(self, sql):
        conn = pymysql.connect(self.host, self.port, self.db, self.charset)
        conn.execute(sql)
        return xxx

    def exc2(self, proc_name):
        conn = pymysql.connect(self.host, self.port, self.db, self.charsett)
        conn.call_proc(proc_name)
        return xxx


obj1 = Foo('1.1.1.1', 3306, 'db1', 'utf-8')
obj1.exc1('select * from t1')
obj1.exc1('select * from t2')

obj2 = Foo('1.1.1.2', 3306, 'db1', 'utf-8')
obj2.exc1('select * from t4')

到此這篇關(guān)于Python面向?qū)ο缶幊痰奈恼戮徒榻B到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python獲取時(shí)間戳的多種方法總結(jié)

    Python獲取時(shí)間戳的多種方法總結(jié)

    時(shí)間戳是一個(gè)表示日期和時(shí)間的數(shù)值,通常以秒為單位,在Python中,獲取時(shí)間戳是常見的任務(wù),用于記錄事件、計(jì)時(shí)操作、以及在各種應(yīng)用中跟蹤時(shí)間,本文將介紹多種獲取時(shí)間戳的方法,包括標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)的方式,并提供示例代碼以幫助你更好地理解
    2023-11-11
  • Python文本預(yù)處理學(xué)習(xí)指南

    Python文本預(yù)處理學(xué)習(xí)指南

    文本預(yù)處理是指在進(jìn)行自然語(yǔ)言處理(NLP)任務(wù)之前,對(duì)原始文本數(shù)據(jù)進(jìn)行清洗、轉(zhuǎn)換和標(biāo)準(zhǔn)化的過(guò)程,本文主要為大家介紹了文本預(yù)處理的使用,需要的可以參考下
    2023-07-07
  • python計(jì)算列表元素與乘積詳情

    python計(jì)算列表元素與乘積詳情

    這篇文章主要介紹了python計(jì)算列表元素與乘積,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 對(duì)Python3 * 和 ** 運(yùn)算符詳解

    對(duì)Python3 * 和 ** 運(yùn)算符詳解

    今天小編就為大家分享一篇對(duì)Python3 * 和 ** 運(yùn)算符詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python數(shù)據(jù)結(jié)構(gòu)與算法之列表(鏈表,linked list)簡(jiǎn)單實(shí)現(xiàn)

    Python數(shù)據(jù)結(jié)構(gòu)與算法之列表(鏈表,linked list)簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之列表(鏈表,linked list)簡(jiǎn)單實(shí)現(xiàn),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Python如何將bmp格式的圖片批量轉(zhuǎn)成jpg

    Python如何將bmp格式的圖片批量轉(zhuǎn)成jpg

    這篇文章主要介紹了Python如何將bmp格式的圖片批量轉(zhuǎn)成jpg問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Flask請(qǐng)求鉤子與上下文及異常處理分項(xiàng)精解

    Flask請(qǐng)求鉤子與上下文及異常處理分項(xiàng)精解

    這篇文章主要介紹了Flask請(qǐng)求鉤子與上下文及異常處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • 淺談Python數(shù)學(xué)建模之?dāng)?shù)據(jù)導(dǎo)入

    淺談Python數(shù)學(xué)建模之?dāng)?shù)據(jù)導(dǎo)入

    數(shù)據(jù)導(dǎo)入是所有數(shù)模編程的第一步,比你想象的更重要。Python 語(yǔ)言中數(shù)據(jù)導(dǎo)入的方法很多。對(duì)于數(shù)學(xué)建模問(wèn)題編程來(lái)說(shuō),選擇什么方法最好呢?答案是:沒(méi)有最好的,只有最合適的。對(duì)于不同的問(wèn)題,不同的算法,以及所調(diào)用工具包的不同實(shí)現(xiàn)方法,對(duì)于數(shù)據(jù)就會(huì)有不同的要求
    2021-06-06
  • Python多線程與多處理之間的區(qū)別詳解

    Python多線程與多處理之間的區(qū)別詳解

    在本文中,我們將學(xué)習(xí) Python 中多線程和多處理的內(nèi)容、原因和方式,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • python復(fù)制與引用用法分析

    python復(fù)制與引用用法分析

    這篇文章主要介紹了python復(fù)制與引用,實(shí)例分析了python中復(fù)制與引用的具體使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論