Python類方法總結講解

2022-09-25 09:12:07 字數 3277 閱讀 6153

在類中的函式稱為類方法。與普通函式定義稍有區別。

1.1 普通方法定義

普通方法與一般函式的定義稍有區別的點在於第乙個引數是self,,指代的意思是指向例項物件本身。如下圖定義

class person:

def __init__(self,name,age):

# name=物件的那個name,age=物件的那個age

self.name=name

self.age=age

1.2 普通方法呼叫

思考一下函式的呼叫是函式名(),類的方法呼叫呢?

類方法呼叫必須要借助物件。呼叫方式:物件.方法名()。

不能直接用類名.方法名(),前面已經說過了類中的方法第乙個引數是self,代表的是例項物件本身,所以類是不程式設計客棧能直接呼叫普通方法的

#例項化物件cat

cat=animals()

#呼叫類中普通方法run

cat.run()

如果使用類名.方法名的時候會出現:typeerror: run() missing 1 required positional argument: 'self',遺失乙個引數。

但實際上我們再使用物件.方法名()的時候也沒有帶self,卻沒有報遺失乙個引數。

原因:當我們例項化物件的時候,即cat=animal()執行的時候已經將cat的位址傳給self,此時self指代的是cat.

2.1 魔術方法定義

前面普通方法是需要物件名.方法名()去呼叫,而我們的魔術方法比較特殊,他是在特殊時刻自動觸發,即不需要呼叫。

2.2 常見魔術方法

__init__(self,[引數名])

物件建立時自動呼叫的方法

__str__(self,[引數名])

函式有返回值,當列印物件名的時候自動呼叫

__del程式設計客棧__(self)

當刪除引用時自動呼叫

__call__(elf,[引數名])

當執行物件名()時自動呼叫即把物件當成函式使用

看上圖我們只是建立了cat物件,並沒有呼叫__init__方法,但是卻執行了方法裡面的方法體,是因為在建立物件時python自動觸發了。

__init__方法有什麼作用:

定義乙個類時,常常要定義屬性和方法,屬性是類的乙個特徵,而方法是它能做的事情。

所有的人都有名字和年齡,所以我們要定義乙個person類,擁有兩個屬性名字和年齡

如果在類裡寫如下圖

class person():

name='jimi'

age=12

def run(self):

print('run')

person1=person()

person2=person()

那麼person1和person2物件擁有了person的屬性,但是此刻他倆的屬性一樣,可是並不符合每個人的特徵啊?每個人的名字和年齡不一致的。那怎麼樣才能創造出物件不一樣的屬性值,這裡就用__init__

class person:

def __init__(self,name,age):

# name=物件的那個name,age=物件的那個age

self.name=name

self.age=age

person1=person('meimei',12)

# 列印person1的屬性 meimei 12

print(person1.name,person1.age)

person2=person('john',13)

# # 列印person1的屬性 john 13

print(person2.name,person2.age)

__str__是用來列印物件時返回乙個值,所以__str__是有return 語句的。如果不用__str__列印物件,物件就是乙個位址

cljovkvzjsass person:

def __init__(self,name,age):

# name=物件的那個name,age=物件的那個age

self.name=name

self.age=age

# def __str__(self):

# return '這是name:{},這是age:{}'.format(self.name,self.age)

person1=person('meimei',12) #列印結果<__main__.person object at>

print(pers程式設計客棧on1)

3.1 類方法定義

class person:

def __init__(self,name,age):

# name=物件的那個name,age=物件的那個age

self.name=name

self.age=age

# def __str__(self,*krg,**krgs):

# return '這是name:{},這是age:{}'.format(self.name,self.age)

#類方法

@classmethod

def test1(cls):

print('我是類方法')

方法前用裝飾器@classmethod修飾。第乙個引數為cls代表類

類方法特點:類方法裡面不能呼叫普通方法

3.2 類方法呼叫

4.1 靜態方法定義

class person:

def __init__(self,name,age):

# name=物件的那個name,age=物件的那個age

self.name=name

self.age=age

# def __str__(self):

# return '這是name:{},這是age:{}'.format(self.name,self.age)

def run(self):

person.test1()

person.test()

print('我是run')

@classmethod

def test1(cls):

print('我是類方法')

@staticmethod

def test(*krgs):

person.test1()

print('我是靜態方法')

靜態方法用裝飾器@staticmethod修飾,無cls,self引數

4.2 靜態方法呼叫

物件名.靜態方法名()

類名.靜態方法名()

普通方法中:

靜態方法:

類方法:

python講解類的特殊成員方法

class dog object 這個類是描述狗這個物件的 def init self,name self.name name staticmethod 實際上跟類沒有什麼關係了。eat和類的關係截斷了,只是類下面函式 靜態方法 只是名義上歸類管理,實際上在靜態方法裡訪問不了類或例項中的任何屬性 d...

python類定義的講解 python類定義的講解

一 類定義 如下 class 類例項化後,可以使用其屬性,實際上,建立乙個類之後,可以通過類名訪問其屬性。如果直接使用類名修改其屬性,那麼將直接影響到已經例項化的物件 類的私有屬性 private attrs 兩個下劃線開頭,宣告該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 ...

python類定義的講解 python類定義的講解

python類定義的講解 是怎麼定義類的,看了下面的文章大家就會了,不用多說,開始學習。一 類定義 如下 class 類例項化後,可以使用其屬性,實際上,建立乙個類之後,可以通過類名訪問其屬性。如果直接使用類名修改其屬性,那麼將直接影響到已經例項化的物件 類的私有屬性 private attrs 兩...