python之class類和方法的用法詳解
類和方法的概念和實例
- 類(Class):用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
- 方法:類中定義的函數(shù)。
- 類的構(gòu)造方法__init__():類有一個名為 init() 的特殊方法(構(gòu)造方法),該方法在類實例化時會自動調(diào)用。
- 實例變量:在類的聲明中,屬性是用變量來表示的,這種變量就稱為實例變量,實例變量就是一個用 self 修飾的變量。
- 實例化:創(chuàng)建一個類的實例,類的具體對象。
- 繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設(shè)計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關(guān)系(例圖,Dog是一個Animal)。
1.python類:class
python的class(類)相當于一個多個函數(shù)組成的家族,如果在這個Myclass大家族里有一個人叫f,假如這個f具有print天氣的作用,那么如果有一天我需要這個f來print一下今天的天氣,那么我必須叫他的全名MyClass.f才可以讓他給我print,即在調(diào)用他的時候需要帶上他的家族名稱+他的名稱。
- 屬性:屬性就是在這個類里的變量。如果變量是物品,那么不同的屬性就是這個大家族里不同的物品
- 方法:方法就是在這個類里的函數(shù)。如果函數(shù)是人,那么不同的方法就是這個大家族里不同的人。
MyClass實例:
#Myclass家族,但是這個家族只有一個人f
class MyClass:
"""一個簡單的類實例"""
i = 12345
def f(self):
return 'hello world'
# 實例化類
x = MyClass()
# 訪問類的屬性和方法
print("MyClass 類的屬性 i 為:", x.i) #家族x + 物品名i
print("MyClass 類的方法 f 輸出為:", x.f()) #家族x + 人名f
輸出結(jié)果:

2.類的構(gòu)造方法__init__()
假如init()也是人,但是他是家族和外界聯(lián)絡(luò)員,當外界的人想調(diào)用自己家族的人,就必須要先告訴他,所以只要家族的人被調(diào)用,那么init()就會被先執(zhí)行,然后由他去告訴那個被調(diào)用的人,執(zhí)行被調(diào)用的。
init()實例:
class Complex:
def __init__(self, realpart, imagpart): #必須要有一個self參數(shù),
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 輸出結(jié)果:3.0 -4.5
輸出結(jié)果:

3.類中方法的參數(shù)self
?????在類的內(nèi)部,使用 def 關(guān)鍵字來定義一個方法,與一般函數(shù)定義不同,類方法必須包含參數(shù)self, 且為第一個參數(shù),self代表的是類的實例。
- self:類的方法與普通的函數(shù)只有一個特別的區(qū)別——必須有一個額外的第一個參數(shù)名稱, 按照慣例它的名稱是self。
- 類的實例:是將類應(yīng)用在實例場景之中,比如有個類里的函數(shù)是f,假如這個f具有print某一時刻的天氣狀況的能力,那么如果我需要這個f來print一下今天12點的天氣,那么讓他打印今天12點的天氣這個動作,就是類的實例化,讓類中的函數(shù)具有的能力變成真實的動作。
實例化實例:
#類定義
class people:
#定義基本屬性
name = ''
age = 0
#定義私有屬性,私有屬性在類外部無法直接進行訪問
#定義構(gòu)造方法
def __init__(self,n,a):
self.name = n
self.age = a
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name,self.age))
# 實例化類
p = people('Python',10,30)
p.speak()
輸出結(jié)果:

4.繼承
假如有兩個家族,有一個家族A開始沒落了,另一個新興的家族B想繼承A家族的物資和傭人,那么就可以通過如下的方式實現(xiàn)繼承,在這里,家族A即是父類,家族B是子類。在用法上,如果B家族可以任意使用A家族的物品和傭人。
class [子類]([父類]):
- BaseClassName(示例中的基類名)必須與派生類定義在一個作用域內(nèi)。除了類,還可以用表達式,基類定義在另一個模塊中時這一點非常有用。
- python還支持多繼承,即可以繼承多個父類。繼承方式和單繼承方式一樣,方式如下:
class [子類]([父類]1, [父類]2, [父類]3):
繼承實例:
#類定義
class people:
#定義基本屬性
name = ''
age = 0
#定義私有屬性,私有屬性在類外部無法直接進行訪問
__weight = 0
#定義構(gòu)造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name,self.age))
#單繼承示例
class student(people): #student為子類,people為父類
grade = ''
def __init__(self,n,a,w,g):
#調(diào)用父類的構(gòu)函
people.__init__(self,n,a,w)
self.grade = g
#覆寫父類的方法
def speak(self):
print("%s 說: 我 %d 歲了,我在讀 %d 年級"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()
運行結(jié)果:

5.方法重寫
如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法。即如果B家族繼承了A家族,但是B家族有個傭人只會掃地,于是A家族給這個人洗腦,讓他啥都不會,然后再教這個傭人洗碗、擦桌子的技能,那么這個傭人就只會洗碗和擦桌子了。
- super()函數(shù)是用于調(diào)用父類(超類)的一個方法。
方法重寫實例:
class Parent: # 定義父類
def myMethod(self):
print('調(diào)用父類方法')
class Child(Parent): # 定義子類
def myMethod(self):
print('調(diào)用子類方法')
c = Child() # 子類實例
c.myMethod() # 子類調(diào)用重寫方法
super(Child,c).myMethod() #用子類對象調(diào)用父類已被覆蓋的方法
輸出結(jié)果:

類的特殊屬性與方法
類的私有屬性
- _private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內(nèi)部的方法中使用時 self.__private_attrs。
私有屬性實例:
class JustCounter:
__secretCount = 0 # 私有變量
publicCount = 0 # 公開變量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print(self.__secretCount)
counter = JustCounter()
counter.count()
counter.count()
print(counter.publicCount)
print(counter.__secretCount) # 報錯,實例不能訪問私有變量
輸出結(jié)果:

類的私有方法
- __private_method:兩個下劃線開頭,聲明該方法為私有方法,只能在類的內(nèi)部調(diào)用 ,不能在類的外部調(diào)用。self.__private_methods。
私有方法實例:
class Site:
def __init__(self, name, url):
self.name = name # public
self.__url = url # private
def who(self):
print('name : ', self.name)
print('url : ', self.__url)
def __foo(self): # 私有方法
print('這是私有方法')
def foo(self): # 公共方法
print('這是公共方法')
self.__foo()
x = Site('Python', 'www.irvingao.com')
x.who() # 正常輸出
x.foo() # 正常輸出
x.__foo() # 報錯
輸出結(jié)果:

到此這篇關(guān)于python之class類和方法的用法詳解的文章就介紹到這了,更多相關(guān)class類和方法的用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python ValueError: invalid literal for int() with base 10 實用
這篇文章主要介紹了Python ValueError: invalid literal for int() with base 10 實用解決方法,本文使用了一個取巧方法解決了這個問題,需要的朋友可以參考下2015-06-06
點云地面點濾波(Cloth Simulation Filter, CSF)
這篇文章主要介紹了點云地面點濾波(Cloth Simulation Filter, CSF)“布料”濾波算法介紹,本文從基本思想到實現(xiàn)思路一步步給大家講解的非常詳細,需要的朋友可以參考下2021-08-08
Python爬蟲如何應(yīng)對Cloudflare郵箱加密
這篇文章主要介紹了Python爬蟲如何應(yīng)對Cloudflare郵箱加密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06

