類的方法
1、類專有的方法
一個類創(chuàng)建的時候,就會包含一些方法,主要有以下方法:
類的專有方法:
方法? | 說明 |
__init__? | 構(gòu)造函數(shù),在生成對象時調(diào)用 |
__del__? | 析構(gòu)函數(shù),釋放對象時使用 |
__repr__? | 打印,轉(zhuǎn)換 |
__setitem__? | 按照索引賦值 |
__getitem__? | 按照索引獲取值 |
__len__? | 獲得長度 |
__cmp__? | 比較運算 |
__call__? | 函數(shù)調(diào)用 |
__add__? | 加運算 |
__sub__? | 減運算 |
__mul__? | 乘運算 |
__div__? | 除運算 |
__mod__? | 求余運算 |
__pow__? | 乘方 |
當(dāng)然有些時候我們需要獲取類的相關(guān)信息,我們可以使用如下的方法:
type(obj):來獲取對象的相應(yīng)類型;
isinstance(obj, type):判斷對象是否為指定的 type 類型的實例;
hasattr(obj, attr):判斷對象是否具有指定屬性/方法;
getattr(obj, attr[, default]) 獲取屬性/方法的值, 要是沒有對應(yīng)的屬性則返回 default 值(前提是設(shè)置了 default),否則會拋出 AttributeError 異常;
setattr(obj, attr, value):設(shè)定該屬性/方法的值,類似于 obj.attr=value;
dir(obj):可以獲取相應(yīng)對象的所有屬性和方法名的列表:
2、方法的訪問控制
其實我們也可以把方法看成是類的屬性的,那么方法的訪問控制也是跟屬性是一樣的,也是沒有實質(zhì)上的私有方法。一切都是靠程序員自覺遵守 Python 的編程規(guī)范。
示例如下,具體規(guī)則也是跟屬性一樣的,
#!/usr/bin/env python # -*- coding: UTF-8 -*- class User(object): def upgrade(self): pass def _buy_equipment(self): pass def __pk(self): pass
3、方法的裝飾器
@classmethod 調(diào)用的時候直接使用類名類調(diào)用,而不是某個對象
@property 可以像訪問屬性一樣調(diào)用方法
具體的使用看下實例:
#!/usr/bin/env python # -*- coding: UTF-8 -*- class UserInfo(object): lv = 5 def __init__(self, name, age, account): self.name = name self._age = age self.__account = account def get_account(self): return self.__account @classmethod def get_name(cls): return cls.lv @property def get_age(self): return self._age if __name__ == '__main__': userInfo = UserInfo('兩點水', 23, 347073565); # 打印所有屬性 print(dir(userInfo)) # 打印構(gòu)造函數(shù)中的屬性 print(userInfo.__dict__) # 直接使用類名類調(diào)用,而不是某個對象 print(UserInfo.lv) # 像訪問屬性一樣調(diào)用方法(注意看get_age是沒有括號的) print(userInfo.get_age)
運行的結(jié)果: