绑定方法与非绑定方法
绑定方法与非绑定方法
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