面向对象高阶成员
# 获取类/对象的所属成员 类/对象.__dict__
res = Demo.__dict__ # 获取当前类的所属成员
res = obj.__dict__ # 获取当前对象的所属成员
# 获取类的文档信息 类/对象.__doc__
res = Demo.__doc__
res = obj.__doc__
# 获取类名称组成的字符串
res = Demo.__name__
# 获取类所在的文件名称,如果是当前文件,显示为__main__
res = Demo.__module__
# __bases__ 获取当前类的父类列表
res = Demo.__base__ # 获取继承的第一个父类
res = Demo.__bases__ # 获取继承的所有的父类列表
# MRO列表 获取当前类的继承链
res = Demo.__mro__
方法的分类
1. 对象方法
特征:
1. 在类中定义的方法,含有self参数
2. 含有self的方法,只能使用对象进行调用
3. 该方法会把调用的对象传递进来
2. 类方法
特征:
1。在类中定义的方法,使用装饰器 @classmethod 进行了装饰
2。方法中有cls这个行参。不需要实例化对象,直接使用类进行调用
3。会把调用这个方法的类传递进来
3. 绑定类方法
特征:
1。在类中定义的方法
2。只能使用类进行调用
3。不会传递对象或者类进来
4. 静态方法
特征:
1。在类中定义的方法,使用了 装饰器 @staticmethod 进行了装饰
2。可以使用对象或者类进行调用
3。不会传递对象或者类进来
class Demo():
# 对象方法
def func1(self):
print(self)
print('this is object function func1')
# 类方法
@classmethod
def func2(cls):
print(cls)
print(' this is class function func2')
# 绑定类方法
def func3():
print('this is bind class function func3')
# 静态方法
@staticmethod
def func4():
print('this is static method func4')
# 实例化对象
obj = Demo()
# 对象方法 调用
# obj.func1()
# Demo.func1() # 不能直接使用类调用 对象方法,
# Demo.func1('a') # 除非传递一个对象进去,不推荐
# 类方法 调用
# Demo.func2() # 可以使用类直接调用
# obj.func2() # 即便使用对象进行调用,传递进去的依然是类
# 绑定类方法
# Demo.func3() # 可以使用类调用绑定类方法
# obj.func3() # 不能使用对象调用绑定类方法
面向对象 常用函数
class Demo():
pass
class A():
pass
class B(A):
pass
class C(A):
ccc = 'abc'
class D(B,C):
name = 'a'
__age = 20
def say(self):
pass
d = D()
# 检测类和对象相关
# issubclass(子类,父类) # 检测一个类是否为另一个类的子类
# res = issubclass(D,B)
# isinstance(对象,类) # 检测一个对象是否是该类或该类的子类的实例化结果
# res = isinstance(d,A) # 输出True
# 操作类和对象成员相关
# hasattr(对象/类,'成员名称') 检测类/对象是否包含指定名称的成员,无法检测是否含有私有成员
# res = hasattr(d,'name')
#getattr(对象/类,'成员名称') # 获取类/对象的成员的值
# res = getattr(d,'say')
# setattr(对象/类,'成员名称','成员的值') 设置类/对象的成员的属性值
res = setattr(d,'name','ooo')
# print(d.name)
#delattr(类/对象,'成员名称') 删除类/对象的成员属性 和 del 直接删除对象的成员是一样的结果
# delattr(D,'name')
# dir() #获取当前对象所有可以访问的成员的列表
res = dir(d)
print(res)