python的绑定与非绑定

绑定与非绑定

类方法(绑定)

类方法,通过装饰器@classmethod进行装饰

类方法操作的一定是类属性,因为类方法无法通过self去查询对象绑定的实例对象

class teacther:
    # 类属性
    id = 0
    # 实例属性
    # 在对象创建好之后,会自动的调用
    def __init__(self,name):
        self.name = name
        # 每实例一个对象,自动调用类方法实现数据累加
        self.count()
    def speak(self):
        print(f"{self.name}在上课")
    @classmethod
    def count(cls):
        cls.id += 1
        return cls.id
xm = teacther("小明")
xl = teacther("侠岚")
print(teacther.id)


# 类方法调用
# 类名.方法名
print(teacther.count())
# 对象名.方法名
print(xm.count())

静态方法(非绑定)

静态方法,通过装饰器@staticmethod进行装饰

静态方法主要是为了代码的方便管理,把类外面的功能函数统一放到类中进行管理

静态方法的调用和类方法的调用是一样的

import time


class student:
    def __init__(self,name):
        self.name = name

    @staticmethod
    def str_time():
        print(f'{time.strftime("%Y/%m/%d")}')
xm = student("小明")
student.str_time()

xm.str_time()

检查类型

检查对象是否由指定的类生成的(isinstance)

class student:
    def __init__(self,name):
        self.name = name

    @staticmethod
    def str_time():
        print(f'{time.strftime("%Y/%m/%d")}')
class a(student):
    pass
xm = student("小明")

# 检查对象是否由指定的类生成
print(isinstance(xm, student))
print(isinstance(xm,a))

检查是否由继承关系(issubclass)

class student:
    def __init__(self,name):
        self.name = name

    @staticmethod
    def str_time():
        print(f'{time.strftime("%Y/%m/%d")}')
class a(student):
    pass
xm = student("小明")

# 检查是否有继承关系
print(issubclass(a, student))
print(issubclass(a, object))

你可能感兴趣的:(python,python)