綁定方法與非綁定方法

綁定方法與非綁定方法

classmethod與staticmethod

一、classmethod(綁定方法)

對象的綁定方法:是由對象來調用,會將調用的對象當作第一個參數傳入python

類的綁定方法:是由類來調用,會將調用的類當作第一個參數傳入算法

是一個python內置的裝飾器,在類內部定義方法時進行裝飾,將類內部的方法變爲「類的綁定辦法」函數

class Foo:
    __date = '天王蓋地虎,Mr沈真牛批'
    def __init__(self,name,age):
        self.name = name
        self.age = age
    @classmethod
    def check_date(cls,name,pwd): # 經過classmethod裝飾器,self變爲cls
        obj = cls(name,pwd)
        if name == 'shen' and pwd == 123:
            print(cls.__date)
        else:
            print('權限不足')

Foo.check_date('shen',123) # 天王蓋地虎,Mr沈真牛批
Foo.check_date('tate',123) # 權限不足

二、非綁定方法(靜態方法、共享方法)(staticmethod)

是python內置的裝飾器,在類的內部定義方法時使用,將類內部的方法變爲「非綁定方法」ui

非綁定方法:能夠由對象或類來調用,誰來調用都是普通的方法(普通函數),方法須要幾個參數就要傳幾個參數,不會將自身傳入code

# uuid用於產生隨機字符串的模塊,由時間戳以及某種算法組合而成,會產生一串世界上獨一無二字符串
import uuid

class Foo:
    date = uuid.uuid4()
    @staticmethod
    def get_date():
        print('天王蓋地虎,Mr沈真牛批')
    @staticmethod
    def info(name,age,sex):
        print(f'姓名: {name}, 年齡: {age}, 性別: {sex}, id: {Foo.date}')

# 由對象調用
obj = Foo()
obj.get_date()  # 天王蓋地虎,Mr沈真牛批
obj.info('shen',18,'male')
# 姓名: shen, 年齡: 18, 性別: male, id: 08ef31e6-ccdf-4e14-8db4-a390c3787acf

# 由類來調用
Foo.get_date()  # 天王蓋地虎,Mr沈真牛批
Foo.info('shen',18,'male')
# 姓名: shen, 年齡: 18, 性別: male, id: 08ef31e6-ccdf-4e14-8db4-a390c3787acf

三、isinstance與issubclass

isinstance:判斷一個對象是不是一個類的實例,若是是返回True,若是不是返回False對象

issubclass:判斷一個類是不是另外一個類的子類,若是是返回True,若是不是返回False字符串

class Foo:
    def __init__(self):
        pass


class Goo:
    def __init__(self):
        pass


foo_obj = Foo()
goo_obj = Goo()
print(isinstance(foo_obj, Foo)) # True
print(isinstance(goo_obj, Foo)) # False
class Foo:
    def __init__(self):
        pass

class Sun(Foo):
    def __init__(self):
        pass

class Goo:
    def __init__(self):
        pass

print(issubclass(Sun,Foo)) # True
print(issubclass(Goo,Foo)) # False
相關文章
相關標籤/搜索