类方法,通过装饰器@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))