類的定義方法大致可以分為兩類 :繫結方法和非繫結方法
其中繫結方法又可以分為繫結到物件的方法和繫結到類的方法
class
person
:def
__init__
(self,name,age)
: self.name = name
self.age = age
defprint_name
(self)
(self.name)
defprint_age
(self)
(self.age)
p1 = person(
'shawn',22
)p1.print_name(
)# shawn
(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)
(cls)
(cls.__name__)
(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
(user.passwd_encrypt)
# 可以發現就是個普通函式
?物件呼叫
p1 = user(
"珊迪"
)ciphertext2 = p1.passwd_encrypt(
"haha"
,'123'
)# 01ddae4032e17a1c338baac9c4322b30
(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(
(info)
# <__main__.duck object at 0x0000020acf597a08>
(info.breed)
# 快跑鴨
(info.size)
# 22
(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裝飾,那麼則是繫結給類...