類別的方法

1、類別專有的方法

一個類別創建的時候,就會包含一些方法,主要有以下方法:

類別的專有方法:

__sub__ 減運算__mul__ 乘運算
方法 #說明
__init__ 建構函數,在產生物件時呼叫
__del__ 析構函數,釋放物件時使用
__repr__ 列印,轉換
__setitem__ 依索引賦值
__getitem__ #依照索引取得值
__len__ 取得長度
__cmp__ 比較運算
__call__ 函數呼叫
#__add__ 加運算
#########__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):可以取得對應物件的所有屬性和方法名稱的清單:

2、方法的存取控制

其實我們也可以把方法看成是類別的屬性的,那麼方法的存取控制也是跟屬性是一樣的,也是沒有實質上的私有方法。一切都是靠著程式設計師自覺遵守 Python 的程式規範。

範例如下,具體規則也是跟屬性一樣的,

#!/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 呼叫的時候直接使用類名類調用,而不是某個物件

@property 可以像存取屬性一樣調用方法

#具體的使用看下實例:

#!/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))
    # 打印构造函数中的属性
    print(userInfo.__dict__)
    # 直接使用类名类调用,而不是某个对象
    print(UserInfo.lv)
    # 像访问属性一样调用方法(注意看get_age是没有括号的)
    print(userInfo.get_age)

運行的結果:

e53dc1900a55b2ba13dc94b9e9d2d4c.png

繼續學習