一個類創(chuàng)建的時候,就會包含一些方法,主要有以下方法:
類的專有方法:
| 方法 | 說明 |
|---|---|
__init__ |
構造函數(shù),在生成對象時調用 |
__del__ |
析構函數(shù),釋放對象時使用 |
__repr__ |
打印,轉換 |
__setitem__ |
按照索引賦值 |
__getitem__ |
按照索引獲取值 |
__len__ |
獲得長度 |
__cmp__ |
比較運算 |
__call__ |
函數(shù)調用 |
__add__ |
加運算 |
__sub__ |
減運算 |
__mul__ |
乘運算 |
__div__ |
除運算 |
__mod__ |
求余運算 |
__pow__ |
乘方 |
當然有些時候我們需要獲取類的相關信息,我們可以使用如下的方法:
type(obj):來獲取對象的相應類型;isinstance(obj, type):判斷對象是否為指定的 type 類型的實例;hasattr(obj, attr):判斷對象是否具有指定屬性/方法;getattr(obj, attr[, default]) 獲取屬性/方法的值, 要是沒有對應的屬性則返回 default 值(前提是設置了 default),否則會拋出 AttributeError 異常;setattr(obj, attr, value):設定該屬性/方法的值,類似于 obj.attr=value;dir(obj):可以獲取相應對象的所有屬性和方法名的列表:其實我們也可以把方法看成是類的屬性的,那么方法的訪問控制也是跟屬性是一樣的,也是沒有實質上的私有方法。一切都是靠程序員自覺遵守 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
@classmethod 調用的時候直接使用類名類調用,而不是某個對象
具體的使用看下實例:
#!/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))
# 打印構造函數(shù)中的屬性
print(userInfo.__dict__)
# 直接使用類名類調用,而不是某個對象
print(UserInfo.lv)
# 像訪問屬性一樣調用方法(注意看get_age是沒有括號的)
print(userInfo.get_age)
運行的結果: