類和物件的繫結方法與非繫結方法

2021-10-13 16:08:31 字數 3332 閱讀 6649

類的定義方法大致可以分為兩類 :繫結方法和非繫結方法

其中繫結方法又可以分為繫結到物件的方法和繫結到類的方法

class

person

:def

__init__

(self,name,age)

: self.name = name

self.age = age

defprint_name

(self)

:print

(self.name)

defprint_age

(self)

:print

(self.age)

p1 = person(

'shawn',22

)p1.print_name(

)# shawn

print

(person.__dict__[

'print_name'])

#

通過__dict__檢視類的屬性字典, 我們可以發現print_name即為繫結到物件的方法, 這個方法不在物件的命名空間中, 而是在類的命名空間中

物件呼叫繫結給物件的方法, 這裡會有乙個自動傳值的過程, 即自動將當前物件傳遞給方法的第乙個引數, 也就是 「self」 (約定俗成的叫self, 也可以叫別的)

若是類呼叫, 則第乙個引數需要手動傳值

?先例項出乙個物件

p1 = person(

'shawn',22

)?物件呼叫繫結給物件的方法

p1.print_name(

)# shawn

?類呼叫繫結給物件的方法

person.print_name(p1)

# shawn

class

computer

: name =

"痞老闆"

age =

19119

money =

90999

@classmethod

defuser_info

(cls)

:print

(cls)

print

(cls.__name__)

print

(cls.name, cls.age, cls.money)

computer.user_info(

)# 類呼叫

'''computer

痞老闆 19119 90999

'''

注意: 物件呼叫繫結給類的方法, 傳入的還是這個物件對應的類

computer(

).user_info(

)# 物件呼叫 (輸出結果還是一樣)

'''computer

痞老闆 19119 90999

'''

import hashlib

class

user

:def

__init__

(self, name)

: self.name = name

@staticmethod

defpasswd_encrypt

(salt, passwd)

: mima = hashlib.md5(salt.encode(

"utf-8"))

mima.update(passwd.encode(

"utf-8"))

return mima.hexdigest(

)?類呼叫

ciphertext = user.passwd_encrypt(

"haha"

,'123'

)# 01ddae4032e17a1c338baac9c4322b30

print

(user.passwd_encrypt)

# 可以發現就是個普通函式

?物件呼叫

p1 = user(

"珊迪"

)ciphertext2 = p1.passwd_encrypt(

"haha"

,'123'

)# 01ddae4032e17a1c338baac9c4322b30

print

(p1.passwd_encrypt)

# 可以發現就是個普通函式

import pickle

with

open

("duck.json"

,"wb"

)as f:

pickle.dump(

,f)

import pickle

class

duck

:def

__init__

(self,breed,size,color)

: self.breed = breed

self.size = size

self.color = color

@classmethod

deffrom_file

(cls)

:return cls(breed,size,color)

# 從檔案裡面拿出資訊

with

open

("duck.json"

,"rb"

)as f1:

duck_info = pickle.load(f1)

# 賦值給這些變數

breed = duck_info[

"品種"

]size = duck_info[

"大小"

]color = duck_info[

"顏色"

]# 通過類來呼叫自己的方法

info = duck.from_file(

)print

(info)

# <__main__.duck object at 0x0000020acf597a08>

print

(info.breed)

# 快跑鴨

print

(info.size)

# 22

print

(info.color)

# yellow

python類的繫結方法與非繫結方法

一 繫結方法 首先我們明確乙個知識點,凡是類中的方法或函式,預設情況下都是繫結給物件使用的。下面,我們通過例項,來慢慢解析繫結方法的應用。class people def init self,name,age self.name name self.age age deftalk self pass...

python 類的繫結方法和非繫結方法

首先我們明確乙個知識點,凡是類中的方法或函式,預設情況下都是繫結給物件使用的。下面,我們通過例項,來慢慢解析繫結方法的應用。class people def init self,name,age self.name name self.age age def talk self pass p peo...

繫結方法與非繫結方法

特性 繫結給誰就應該由誰來呼叫,誰來呼叫就會將誰當作第乙個引數自動傳入 精髓在於自動傳值 繫結方法分為兩類 1.1 繫結給物件方法 在類內部定義的函式 沒有被任何裝飾器修飾的 預設就是繫結給物件用的 1.2 繫結給類的方法 在類內部定義的函式如果被裝飾器 classmethod裝飾,那麼則是繫結給類...