類的經常使用特徵

講解見代碼:python

一、__call__()方法、__repr__()方法、靜態方法、類方法、屬性方法。ui

 

#!/usr/bin/env python2
# -*- coding:utf-8 -*-
__author__ = 'DSOWASP'


class B(object):
    def __init__(self):
        pass


class A(object):
    def __init__(self):
        self.name = "ds"
    age = 18

    # 實例()時調用
    def __call__(self, *args, **kwargs):
        print("call")
        return B()

    # print(實例)時調用
    def __repr__(self):
        return "__repr__"

    # 類方法,只能訪問類變量,不能訪問實例變量
    @classmethod
    def talk(cls):
        print(cls.age)    # 不能訪問self.name

    # 靜態方法不訪問實例變量和類變量,實例.靜態方法()時,不會自動傳入的id。一個方法不要訪問了類和實例變量,但類
    # 又要用這個方法時能夠定義爲靜態方法。
    @staticmethod
    def walk(cmd):
        print("the cmd is :%s"% cmd)      # 不訪問self.name和A.age,

    # 將方法轉爲屬性,方法他時,不帶括號。實例.方法。只有輸出,但不接收輸入時可使用。
    @property
    def shout(self):
        print("shout:%s"%self.name)
        return 18

    # 這個property.setter裝飾的方法必須是被property裝飾過的方法。
    # 不然報錯:TypeError: descriptor 'setter' requires a 'property' object but received a 'function'
    @shout.setter
    def shout(self,arg):
        print("shout:%s, %s"%(self.name,arg))
        return 18
a = A()
a.walk("uptime")
b = a.shout
a.shout = 20
print(b)
相關文章
相關標籤/搜索