Pyhton学习——Day25
生活随笔
收集整理的這篇文章主要介紹了
Pyhton学习——Day25
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#面向?qū)ο蟮膸讉€(gè)方法
#1.靜態(tài)方法@staticmethod,不能訪問(wèn)類(lèi)屬性,也不能訪問(wèn)實(shí)例屬性,只是類(lèi)的工具包
#2.類(lèi)方法:@classmethod,在函數(shù)屬性前加上類(lèi)方法,顯示為(cls)代表類(lèi),類(lèi)能訪問(wèn)到數(shù)據(jù)屬性和函數(shù)屬性,不能訪問(wèn)至實(shí)例屬性
#3.靜態(tài)屬性:@property,把函數(shù)封裝成一個(gè)數(shù)據(jù)屬性的形式,讓外部調(diào)用時(shí)看不到內(nèi)部的邏輯;特點(diǎn):定義時(shí)有self(實(shí)例本身)
#################################################################################################################
#組合(拼接):定義一個(gè)人的類(lèi),比如手、頭、腳,這個(gè)屬性又可以是通過(guò)一個(gè)實(shí)例化的對(duì)象,這就是組合
#用途:1.做關(guān)聯(lián)、2.小的組成大的
# class Head:
# pass
# class Foot:
# pass
# class Trunk:
# pass
# class Hand:
# pass
# class Person:
# def __init__(self,id_num,head,foot,trunk,hand):
# self.id_num = id_num
# self.head = head()
# self.foot = foot()
# self.trunk = trunk()
# self.hand = hand()
# P1 = Person.__dict__
# print(P1)
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日學(xué)習(xí)打卡/Day25.py
# {'__module__': '__main__', '__init__': <function Person.__init__ at 0x000000000297A6A8>,
# '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__':
# <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
#
# Process finished with exit code 0
#################################################################################################################
# class School:
# def __init__(self,name,addr):
# self.name = name
# self.addr = addr
#
# class Course:
# def __init__(self,name,price,period,school):
# self.name = name
# self.price = price
# self.period = period
# self.school = school
# def employ(self):
# print('%s 正在empoying'%self.name)
# s1 = School('oldboy','beijing')
# s2 = School('oldboy','nanjing')
# s3 = School('oldboy','dongjing')
# c1 = Course('linux',10,'1h',s1)
# c2 = Course('Python',100,'100h',s2)
# msg = '''
# 1 oldboy beijing
# 2 oldboy nanjing
# 3 oldboy dongjing
# '''
# while True:
# print(msg)
# menu = {
# '1':s1,
# '2':s2,
# '3':s3
# }
# choice = input('選擇學(xué)校>>>')
# school_obj = menu[choice]
# # choice2 = input('選擇課程>>>')
# name = input('課程名>>: ')
# price = input('課程費(fèi)用>>: ')
# period = input('課程周期>>: ')
# new_course = Course(name, price, period, school_obj)
# print('課程【%s】屬于【%s】學(xué)校' % (new_course.name, new_course.school.name))
# 模擬選課##############################################################################################
#################################################################################################################
#################################################################################################################
# 面向?qū)ο蟮娜筇匦?br /># 1.繼承 2.多態(tài) 3.封裝
# 一、什么是類(lèi)的繼承?
# 類(lèi)的繼承跟現(xiàn)實(shí)中的父子、孫子、重孫子、繼承關(guān)系一樣,父類(lèi)又稱(chēng)為基類(lèi)
# python中的類(lèi)的繼承分為:單繼承和多繼承
# class ParentClass1:
# pass
# class ParentClass2:
# pass
# class SubClass(ParentClass1): #單繼承
# pass
# class SubClass(ParentClass1,ParentClass2): #多繼承
# pass
# 二、子類(lèi)到底繼承了父類(lèi)的什么屬性
# 子類(lèi)調(diào)用方法會(huì)觸發(fā)父類(lèi)的init方法,子類(lèi)繼承了父類(lèi)的所有屬性,但是子類(lèi)的方法還是先調(diào)用自己的方法,找不到自己的方法才會(huì)去
# 父類(lèi)去找方法或?qū)傩?br /># class robot:
# power = 100
# def __init__(self,name,energy):
# self.name = name
# self.energy = energy
# def act(self):
# print('%s機(jī)器人正在消耗能源'%self.name)
# class robot_arm(robot):
# def __init__(self,type):
# self.type = type
# def act1(self):
# print('%s型號(hào)機(jī)器人正在動(dòng)arm'%self.type)
# r = robot('pandaboy','氫氣能源')
# r1 = robot_arm('ASII')
# r1.act1()
# print(r1.power)
#################################################################################################################
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日學(xué)習(xí)打卡/Day25.py
# ASII型號(hào)機(jī)器人正在動(dòng)arm
# 100
#
# Process finished with exit code 0
#################################################################################################################
#################################################################################################################
# 什么時(shí)候用繼承?
# 1.當(dāng)類(lèi)之間有顯著不同,并且較小的類(lèi)是較大的類(lèi)所需要的組件,用組合比較好
# 例如:描述一個(gè)機(jī)器人類(lèi),機(jī)器人這個(gè)大類(lèi)是由很多互不相關(guān)的小類(lèi)組成的,如機(jī)器手臂類(lèi)、身體類(lèi)、電池類(lèi)等
# 2.當(dāng)類(lèi)之間有很多相同的功能,提取這些共同的功能做成基類(lèi),用繼承比較好
#################################################################################################################
# 什么是派生?
# 當(dāng)然子類(lèi)也可以添加自己新的屬性或者在自己這里重新定義這些屬性(不會(huì)影響到父類(lèi)),需要注意的是,
# 一旦重新定義了自己的屬性且與父類(lèi)重名,那么調(diào)用新增的屬性時(shí),就以自己為準(zhǔn)了。
#################################################################################################################
# 繼承同時(shí)具有兩種含義
# 含義一:繼承基類(lèi)的方法,并且自己的改變或者擴(kuò)展(代碼重用)
# 含義二:聲明某個(gè)子類(lèi)兼容于某基類(lèi),定義一個(gè)借口類(lèi),子類(lèi)繼承接口類(lèi),并且實(shí)現(xiàn)接口中定義的方法
# 實(shí)踐中,繼承的第一種含義意義并不是很大,甚至是有害的,因?yàn)樗沟米宇?lèi)與基類(lèi)出現(xiàn)強(qiáng)耦合
# 繼承的第二種含義非常重要,它又叫"接口繼承"
# 接口繼承實(shí)質(zhì)上是要求"做出一個(gè)良好的抽象,這個(gè)抽象規(guī)定了一個(gè)兼容接口,使得外部調(diào)用者無(wú)需關(guān)心具體細(xì)節(jié),可以一視同仁
# 的處理實(shí)現(xiàn)特定接口的所有對(duì)象——這在程序設(shè)計(jì)上叫做歸一化"
# 歸一化使得高層的外部使用者可以不加區(qū)分的處理所有接口兼容的對(duì)象集合——就好像linux的泛文件對(duì)象概念一樣,
# 所有的東西都可以當(dāng)做文件處理,不必關(guān)心它是內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)還是屏幕(當(dāng)然,對(duì)于底層設(shè)計(jì)者,也可以區(qū)分出"字符設(shè)備"和"塊設(shè)備")
# 然后做出針對(duì)性的設(shè)計(jì),細(xì)致到什么程度,視需求而定
# 一切皆文件是沒(méi)有意義的,歸根結(jié)底就是全部都是讀和寫(xiě)
#################################################################################################################
# 接口繼承代表定義一個(gè)基類(lèi),類(lèi)當(dāng)中把接口的方法定義一個(gè)函數(shù),來(lái)一個(gè)子類(lèi)就必須實(shí)現(xiàn)基類(lèi)的方法
# 接口就是一個(gè)函數(shù)
# import abc
# 1.python可以繼承多個(gè)類(lèi),java和c只能繼承一個(gè)類(lèi)
# 2.python如果繼承了多個(gè)類(lèi),那么尋找方法的方式有兩種,分別是深度優(yōu)先和廣度優(yōu)先
# 當(dāng)類(lèi)是經(jīng)典類(lèi)時(shí),多繼承情況下,會(huì)按照深度優(yōu)先方式查找
# 當(dāng)類(lèi)時(shí)新式類(lèi)時(shí),多繼承情況下,會(huì)按照廣度優(yōu)先方式查找
#————————————————————————————————————————————————————————
# 繼承順序
# class A:
# pass
# class B(A):
# pass
# class C(A):
# pass
# 在子類(lèi)中繼承父類(lèi)
# super().__init__()
# 運(yùn)行super調(diào)用super下的方法
#1.靜態(tài)方法@staticmethod,不能訪問(wèn)類(lèi)屬性,也不能訪問(wèn)實(shí)例屬性,只是類(lèi)的工具包
#2.類(lèi)方法:@classmethod,在函數(shù)屬性前加上類(lèi)方法,顯示為(cls)代表類(lèi),類(lèi)能訪問(wèn)到數(shù)據(jù)屬性和函數(shù)屬性,不能訪問(wèn)至實(shí)例屬性
#3.靜態(tài)屬性:@property,把函數(shù)封裝成一個(gè)數(shù)據(jù)屬性的形式,讓外部調(diào)用時(shí)看不到內(nèi)部的邏輯;特點(diǎn):定義時(shí)有self(實(shí)例本身)
#################################################################################################################
#組合(拼接):定義一個(gè)人的類(lèi),比如手、頭、腳,這個(gè)屬性又可以是通過(guò)一個(gè)實(shí)例化的對(duì)象,這就是組合
#用途:1.做關(guān)聯(lián)、2.小的組成大的
# class Head:
# pass
# class Foot:
# pass
# class Trunk:
# pass
# class Hand:
# pass
# class Person:
# def __init__(self,id_num,head,foot,trunk,hand):
# self.id_num = id_num
# self.head = head()
# self.foot = foot()
# self.trunk = trunk()
# self.hand = hand()
# P1 = Person.__dict__
# print(P1)
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日學(xué)習(xí)打卡/Day25.py
# {'__module__': '__main__', '__init__': <function Person.__init__ at 0x000000000297A6A8>,
# '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__':
# <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
#
# Process finished with exit code 0
#################################################################################################################
# class School:
# def __init__(self,name,addr):
# self.name = name
# self.addr = addr
#
# class Course:
# def __init__(self,name,price,period,school):
# self.name = name
# self.price = price
# self.period = period
# self.school = school
# def employ(self):
# print('%s 正在empoying'%self.name)
# s1 = School('oldboy','beijing')
# s2 = School('oldboy','nanjing')
# s3 = School('oldboy','dongjing')
# c1 = Course('linux',10,'1h',s1)
# c2 = Course('Python',100,'100h',s2)
# msg = '''
# 1 oldboy beijing
# 2 oldboy nanjing
# 3 oldboy dongjing
# '''
# while True:
# print(msg)
# menu = {
# '1':s1,
# '2':s2,
# '3':s3
# }
# choice = input('選擇學(xué)校>>>')
# school_obj = menu[choice]
# # choice2 = input('選擇課程>>>')
# name = input('課程名>>: ')
# price = input('課程費(fèi)用>>: ')
# period = input('課程周期>>: ')
# new_course = Course(name, price, period, school_obj)
# print('課程【%s】屬于【%s】學(xué)校' % (new_course.name, new_course.school.name))
# 模擬選課##############################################################################################
#################################################################################################################
#################################################################################################################
# 面向?qū)ο蟮娜筇匦?br /># 1.繼承 2.多態(tài) 3.封裝
# 一、什么是類(lèi)的繼承?
# 類(lèi)的繼承跟現(xiàn)實(shí)中的父子、孫子、重孫子、繼承關(guān)系一樣,父類(lèi)又稱(chēng)為基類(lèi)
# python中的類(lèi)的繼承分為:單繼承和多繼承
# class ParentClass1:
# pass
# class ParentClass2:
# pass
# class SubClass(ParentClass1): #單繼承
# pass
# class SubClass(ParentClass1,ParentClass2): #多繼承
# pass
# 二、子類(lèi)到底繼承了父類(lèi)的什么屬性
# 子類(lèi)調(diào)用方法會(huì)觸發(fā)父類(lèi)的init方法,子類(lèi)繼承了父類(lèi)的所有屬性,但是子類(lèi)的方法還是先調(diào)用自己的方法,找不到自己的方法才會(huì)去
# 父類(lèi)去找方法或?qū)傩?br /># class robot:
# power = 100
# def __init__(self,name,energy):
# self.name = name
# self.energy = energy
# def act(self):
# print('%s機(jī)器人正在消耗能源'%self.name)
# class robot_arm(robot):
# def __init__(self,type):
# self.type = type
# def act1(self):
# print('%s型號(hào)機(jī)器人正在動(dòng)arm'%self.type)
# r = robot('pandaboy','氫氣能源')
# r1 = robot_arm('ASII')
# r1.act1()
# print(r1.power)
#################################################################################################################
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日學(xué)習(xí)打卡/Day25.py
# ASII型號(hào)機(jī)器人正在動(dòng)arm
# 100
#
# Process finished with exit code 0
#################################################################################################################
#################################################################################################################
# 什么時(shí)候用繼承?
# 1.當(dāng)類(lèi)之間有顯著不同,并且較小的類(lèi)是較大的類(lèi)所需要的組件,用組合比較好
# 例如:描述一個(gè)機(jī)器人類(lèi),機(jī)器人這個(gè)大類(lèi)是由很多互不相關(guān)的小類(lèi)組成的,如機(jī)器手臂類(lèi)、身體類(lèi)、電池類(lèi)等
# 2.當(dāng)類(lèi)之間有很多相同的功能,提取這些共同的功能做成基類(lèi),用繼承比較好
#################################################################################################################
# 什么是派生?
# 當(dāng)然子類(lèi)也可以添加自己新的屬性或者在自己這里重新定義這些屬性(不會(huì)影響到父類(lèi)),需要注意的是,
# 一旦重新定義了自己的屬性且與父類(lèi)重名,那么調(diào)用新增的屬性時(shí),就以自己為準(zhǔn)了。
#################################################################################################################
# 繼承同時(shí)具有兩種含義
# 含義一:繼承基類(lèi)的方法,并且自己的改變或者擴(kuò)展(代碼重用)
# 含義二:聲明某個(gè)子類(lèi)兼容于某基類(lèi),定義一個(gè)借口類(lèi),子類(lèi)繼承接口類(lèi),并且實(shí)現(xiàn)接口中定義的方法
# 實(shí)踐中,繼承的第一種含義意義并不是很大,甚至是有害的,因?yàn)樗沟米宇?lèi)與基類(lèi)出現(xiàn)強(qiáng)耦合
# 繼承的第二種含義非常重要,它又叫"接口繼承"
# 接口繼承實(shí)質(zhì)上是要求"做出一個(gè)良好的抽象,這個(gè)抽象規(guī)定了一個(gè)兼容接口,使得外部調(diào)用者無(wú)需關(guān)心具體細(xì)節(jié),可以一視同仁
# 的處理實(shí)現(xiàn)特定接口的所有對(duì)象——這在程序設(shè)計(jì)上叫做歸一化"
# 歸一化使得高層的外部使用者可以不加區(qū)分的處理所有接口兼容的對(duì)象集合——就好像linux的泛文件對(duì)象概念一樣,
# 所有的東西都可以當(dāng)做文件處理,不必關(guān)心它是內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)還是屏幕(當(dāng)然,對(duì)于底層設(shè)計(jì)者,也可以區(qū)分出"字符設(shè)備"和"塊設(shè)備")
# 然后做出針對(duì)性的設(shè)計(jì),細(xì)致到什么程度,視需求而定
# 一切皆文件是沒(méi)有意義的,歸根結(jié)底就是全部都是讀和寫(xiě)
#################################################################################################################
# 接口繼承代表定義一個(gè)基類(lèi),類(lèi)當(dāng)中把接口的方法定義一個(gè)函數(shù),來(lái)一個(gè)子類(lèi)就必須實(shí)現(xiàn)基類(lèi)的方法
# 接口就是一個(gè)函數(shù)
# import abc
# 1.python可以繼承多個(gè)類(lèi),java和c只能繼承一個(gè)類(lèi)
# 2.python如果繼承了多個(gè)類(lèi),那么尋找方法的方式有兩種,分別是深度優(yōu)先和廣度優(yōu)先
# 當(dāng)類(lèi)是經(jīng)典類(lèi)時(shí),多繼承情況下,會(huì)按照深度優(yōu)先方式查找
# 當(dāng)類(lèi)時(shí)新式類(lèi)時(shí),多繼承情況下,會(huì)按照廣度優(yōu)先方式查找
#————————————————————————————————————————————————————————
# 繼承順序
# class A:
# pass
# class B(A):
# pass
# class C(A):
# pass
# 在子類(lèi)中繼承父類(lèi)
# super().__init__()
# 運(yùn)行super調(diào)用super下的方法
轉(zhuǎn)載于:https://www.cnblogs.com/pandaboy1123/p/8485838.html
總結(jié)
以上是生活随笔為你收集整理的Pyhton学习——Day25的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#安装本地nupkg包
- 下一篇: VeraCrypt文件硬盘加密使用教程