绑定方法与非绑定方法

绑定方法与非绑定方法

classmethod与staticmethod

1、classmethod(绑定方法)

对象的绑定方法:是由对象来调用,会将调用的对象当做第一个参数传入

类的绑定方法:是由类来调用,会将调用的类当做第一个参数传入

是一个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) # 权限不足

2、非绑定方法(静态方法、共享方法)(staticmethod)

是python内置的装饰器,在类的内部定义方法时使用,将类内部的方法变为“非绑定方法”

非绑定方法:可以由对象或类来调用,谁来调用都是普通的方法(普通函数),方法需要几个参数就要传几个参数,不会将自身传入

# 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

3、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
posted @ 2019-11-28 21:35  Mr沈  阅读(238)  评论(0编辑  收藏  举报