class传参 python_Python类的概念、定义、属性、继承
1.面向?qū)ο?Object Oriented,OO)概念
面向?qū)ο?#xff0c;是我們編程的一種思維。
早期的計(jì)算機(jī)編程是基于面向過程的方法,例如實(shí)現(xiàn)算術(shù)運(yùn)算1+1+2 = 4,通過設(shè)計(jì)一個(gè)算法就可以解決當(dāng)時(shí)的問題。隨著計(jì)算機(jī)技術(shù)的不斷提高,計(jì)算機(jī)被用于解決越來越復(fù)雜的問題。通過面向?qū)ο蟮姆绞?#xff0c;將現(xiàn)實(shí)世界的事物抽象成對(duì)象,現(xiàn)實(shí)世界中的關(guān)系抽象成類、繼承。通過面向?qū)ο蟮姆椒?#xff0c;更利于用人理解的方式,對(duì)復(fù)雜系統(tǒng)進(jìn)行分析、設(shè)計(jì)與編程。同時(shí)也提高了系統(tǒng)的可維護(hù)性,可擴(kuò)展性,可重用性。
(就是使編程的思維,更接近與人的思維和認(rèn)知)
面向?qū)ο缶幊痰年P(guān)鍵,就是類的定義。
類是對(duì)現(xiàn)實(shí)生活中一類具有共同特征的事物的抽象。
2.類的定義
基本形式: class ClassName(object): Statement 1.class定義類的關(guān)鍵字2.ClassName類名,類名的每個(gè)單詞的首字母大寫(駝峰規(guī)則)。3.object是父類名,object是一切類的基類。在python3中如果繼承類是基類可以省略不寫。'''重點(diǎn):學(xué)會(huì)定義類,了解屬性和方法,類的初始化和實(shí)例化。定義類時(shí),這種方法可以使類對(duì)象實(shí)例按某種特定的模式生產(chǎn)出來。'''#類方法:'''后面的參數(shù)中第一個(gè)參數(shù)我們約定俗成的為self參數(shù)名,self代表的是在類實(shí)例化后這個(gè)實(shí)例對(duì)象本身。初始化函數(shù)除了有self這個(gè)參數(shù)表示實(shí)例對(duì)象本身之外,其他的參數(shù)的定義也遵循函數(shù)的必備參數(shù)和默認(rèn)參數(shù)一樣的原則,必備參數(shù)就是在實(shí)例化是一定要傳入的參數(shù),默認(rèn)參數(shù)就是在定義時(shí)可以給這個(gè)參數(shù)一個(gè)初始值。沒有函數(shù)名的函數(shù)'''3.類的實(shí)例化
基本形式:實(shí)例對(duì)象名 = 類名(參數(shù)) 在實(shí)例化的過程中,self代表的就是這個(gè)實(shí)例對(duì)象自己。 實(shí)例化時(shí)會(huì)把類名后面接的參數(shù)傳進(jìn)去賦值給實(shí)例, 這樣傳進(jìn)去的參數(shù)就成為了這個(gè)實(shí)例對(duì)象的屬性。 實(shí)例化的過程遵循函數(shù)調(diào)用的原則。 在實(shí)例化時(shí)也必須個(gè)數(shù)和順序與定義時(shí)相同(使用關(guān)鍵字參數(shù)可以改變傳參的順序)。 當(dāng)初始化函數(shù)定義時(shí)使用了默認(rèn)參數(shù)時(shí),在實(shí)例化時(shí)默認(rèn)參數(shù)可以不傳參這時(shí) 這個(gè)實(shí)例對(duì)象就會(huì)使用默認(rèn)的屬性,如果傳了參數(shù)進(jìn)去則會(huì)改變這參數(shù)值, 使實(shí)例化對(duì)象的屬性就為你傳進(jìn)來的這個(gè)參數(shù)。 isinstance(實(shí)例名,類名) 判斷一個(gè)實(shí)例是不是這個(gè)類的實(shí)例。#類 類是對(duì)現(xiàn)實(shí)生活中,具有共同特征的事物的抽象。class Animal(object): pass# object, 基類。 任何類都需要繼承object# 類 (模子)class Animal: #python3 繼承object,可寫可不寫 passdog = Animal() #生成一個(gè)實(shí)例 dogcat = Animal() #生成實(shí)例cat##構(gòu)造方法 __init__() , self 參數(shù)class Animal: def __init__(self): # 構(gòu)造方法,實(shí)例化對(duì)象時(shí),必須要調(diào)用__init__ print('正在實(shí)例化一個(gè)類') def test(self): print('aaa')#當(dāng)我們沒有寫__init__() ,默認(rèn)調(diào)用我們父類__init__class Animal: def test(self): print('aaa')###self, 實(shí)例化對(duì)象(本身)#self 可以替換成別的參數(shù)名。但是最好別改class TestSelf: #方法 :testSelf 方法的首字母小寫 類: TestSelf 類的首字母一般大寫 駝峰命名規(guī)則 def __init__(self): #在初始化的時(shí)候,默認(rèn)往構(gòu)造方法,傳入一個(gè)值 print('正在實(shí)例化') def test(self): print('bbb') def test2(): print('ccc')4.類和實(shí)例的屬性
類屬性 .類屬性是可以直接通過“類名.屬性名”來訪問和修改。 .類屬性是這個(gè)類的所有實(shí)例對(duì)象所共有的屬性, 任意一個(gè)實(shí)例對(duì)象都可以訪問并修改這個(gè)屬性(私有隱藏除外)。 .對(duì)類屬性的修改,遵循基本數(shù)據(jù)類型的特性:列表可以直接修改,字符串不可以, 所以當(dāng)類屬性是一個(gè)列表時(shí),通過任意一個(gè)實(shí)例對(duì)象對(duì)其進(jìn)行修改。 但字符串類型的類屬性不能通過實(shí)例對(duì)象對(duì)其進(jìn)行修改。 當(dāng)實(shí)例對(duì)不可變對(duì)象進(jìn)行修改之后,會(huì)查找實(shí)例的類屬性,不會(huì)查找類的屬性,同時(shí)類的屬性不會(huì)邊 實(shí)例屬性 .在屬性前面加了self標(biāo)識(shí)的屬性為實(shí)例的屬性。 .在定義的時(shí)候用的self加屬性名字的形式,在查看實(shí)例的屬性時(shí) 就是通過實(shí)例的名稱+‘.’+屬性名來訪問實(shí)例屬性。 一些說明: .一般,方法第一個(gè)參數(shù)被命名為self,,這僅僅是一個(gè)約定, self沒有特殊含義,程序員遵循這個(gè)約定。 .查看類中的屬性和實(shí)例屬性可以調(diào)用__dict__方法返回屬性組成的字典。 .Python中屬性的獲取是按照從下到上的順序來查找屬性 .Python中的類和實(shí)例是兩個(gè)完全獨(dú)立的對(duì)象 .Python中的屬性設(shè)置是針對(duì)對(duì)象本身進(jìn)行的####屬性, 屬性本質(zhì)上就一個(gè)變量'''1.實(shí)例化屬性2.類屬性 (共有屬性)'''# 1.實(shí)例化屬性 , self.nameclass Animal: def __init__(self,name,food): #自己獨(dú)有的,就放到實(shí)例化里面 print('正在實(shí)例化') self.name = name # 實(shí)例化屬性:每個(gè)實(shí)例可能不同,但是都有 self.food = food def get_name(self): print(self.name)#2.類屬性 (共有屬性)class Animal: eye = 2 leg = 4 #共有的 def __init__(self,name,food): print('正在實(shí)例化') self.name = name self.food = food def get_name(self): print(self.name)5.類的私有屬性和方法
在Python中,通過單下劃線”_”來實(shí)現(xiàn)模塊級(jí)別的私有化,一般約定以單下劃線”_”開頭的變量、函數(shù)為模塊私有的,也就是說”from moduleName import *”將不會(huì)引入以單下劃線”_”開頭的變量、函數(shù) 對(duì)于Python中的類屬性,可以通過雙下劃線”__”來實(shí)現(xiàn)一定程度的私有化。 _”和” __”的使用 更多的是一種規(guī)范/約定,不沒有真正達(dá)到限制的目的: “_”:以單下劃線開頭只能允許其本身與子類進(jìn)行訪問,(起到一個(gè)保護(hù)的作用) “__”:雙下劃線的表示的是私有類型的變量。這類屬性在運(yùn)行時(shí)屬性名會(huì)加上單下劃線和類名。 “__foo__”:以雙下劃線開頭和結(jié)尾的(__foo__)代表python里特殊方法專用的標(biāo)識(shí),如 __init__()'''在Python中,通過單下劃線”_”來實(shí)現(xiàn)模塊級(jí)別的私有化,一般約定以單下劃線”_”開頭的變量、函數(shù)為模塊私有的,也就是說”from moduleName import *”將不會(huì)引入以單下劃線”_”開頭的變量、函數(shù)'''import random #全部會(huì)導(dǎo)入 from random import* #_Set 不會(huì)倒入class Animal: _eye = 2 __leg = 4 #共有的 def __init__(self,name,food): print('正在實(shí)例化') self.name = name self.food = food def get_name(self): print(self.name)#_”和” __”的使用 更多的是一種規(guī)范/約定,并沒有真正達(dá)到限制的目的:dog._eye = 3#dog._Animal__leg ##__ 默認(rèn)加一個(gè)類名,用來警告# “__foo__”:以雙下劃線開頭和結(jié)尾的(__foo__)#代表python里特殊方法專用的標(biāo)識(shí),如 __init__()6.數(shù)據(jù)封裝
在類里面數(shù)據(jù)屬性和行為函數(shù)的形式封裝起來,訪問時(shí)直接調(diào)用,不需知道類里面具體的實(shí)現(xiàn)方法。 比如,list.append7.繼承
用法: .在定義類時(shí),可以從已有的類繼承, 被繼承的類稱為基類(父類),新定義的類稱為派生類(子類)。 .在類中找不到調(diào)用的屬性時(shí)就搜索基類, 如果基類是從別的類派生而來,這個(gè)規(guī)則會(huì)遞歸的應(yīng)用上去。 反過來不行。 .如果派生類中的屬性與基類屬性重名,那么派生類的屬性會(huì)覆蓋掉基類的屬性。 包括初始化函數(shù)。 .派生類在初始化函數(shù)中需要繼承和修改初始化過程, 使用’類名+__init__(arg)’來實(shí)現(xiàn)繼承和私有特性,也可以使用super()函數(shù)。 issubclass(類名1,類名2) 判斷類1是否繼承了類2 作用: 面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制。 繼承完全可以理解成類之間的類型和子類型關(guān)系。 子類在重寫父類方法之后,如果要繼承父類方法中的功能,要先調(diào)用父類的方法 class.fun(self)8.多態(tài)
當(dāng)派生類重寫了基類的方法時(shí)就實(shí)現(xiàn)了多態(tài)性。(子類重寫父類方法)
## 面向?qū)ο?三個(gè)特征: 封裝 ,繼承 多態(tài)# 封裝class Animal: eye = 2 leg = 4 #共有的 def __init__(self,name,food): print('正在實(shí)例化') self.name = name self.food = food def get_name(self): print(self.name) def get_food(self): print(self.food)# 繼承#面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用class People(Animal): leg = 2 def __init__(self,name,food,sex): self.name = name self.food = food self.sex = sex def get_sex(self): print(self.sex) def speak(self): print('asdsdgfsagg') def eat(self): print('果子') #多態(tài), (子類重寫父類方法) ,繼承。 (同一個(gè)方法,有不同表形式)class Chinse(People): def speak(self): print('你好') def eat(self): print('米飯')class America(People): def speak(self): print('hello') def eat(self): print('面包') class Thai(People): def speak(self): print('薩瓦迪卡') def eat(self): print('香蕉')xiaoMing = Chinse('小明','米飯','男')jeck = America('jeck','面包','男')lala = Thai('lala','香蕉','未知')'''總結(jié):1.類的定義2.__init__() 構(gòu)造方法3.self 參數(shù)。 實(shí)例對(duì)象本身4.類屬性 (共有屬性), 實(shí)例化屬性 5._ __ python 類的私有化。6. 面向?qū)ο?三大特征: 封裝 繼承 多態(tài)'''“我自己是一名從事了多年開發(fā)的Python老程序員,辭職目前在做自己的Python私人定制課程,今年年初我花了一個(gè)月整理了一份最適合2019年學(xué)習(xí)的Python學(xué)習(xí)干貨,從最基礎(chǔ)的到各種框架都有整理,送給每一位喜歡Python小伙伴,想要獲取的可以轉(zhuǎn)發(fā)文章并關(guān)注我的頭條號(hào)。在后臺(tái)私信我:01,即可免費(fèi)獲取。"
總結(jié)
以上是生活随笔為你收集整理的class传参 python_Python类的概念、定义、属性、继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java激光图,java-OpenCV
- 下一篇: python一些简单操作_python列