python基础:类的常用函数

1、issubclass()
检测一个类是否是另外一个类的子类
2、isinstance()
检测一个对象是否是某个类的对象
3、反射方法
python面向对象中的反射:通过字符串的形式操作对象相关的属性

1、issubclass()
检测一个类是否是另外一个类的子类
格式1:issubclass(被检测类,父类)
返回值:布尔值
格式1:issubclass(被检测类,(父类1,父类2,父类3…))
返回值:布尔值
注意:只要有一个类是当前被检测类的父类,那么最终结果就是True

class A(object):
    pass

class B(A):
    pass
class C(object):
    pass

ret=issubclass(B,(A,C))    # A与C中,A被检测到是B的父类,将返回True
print(ret)

运行结果:

True

2、isinstance()
检测一个对象是否是某个类的对象
格式1:isinstance(对象,类)
返回值:布尔值
格式2:isinstance(对象,(类1,类2,类3…))
返回值:布尔值
注意:只要一个类是当前对象的类,那么最终结果就是True

class A(object):
    pass

class B(A):
    pass
class C(object):
    pass
b=B()
ret=isinstance(b ,B)
print(ret)    # True
ret=isinstance(b,A)
print(ret)    # True
ret=isinstance(b,(A,B,C))   # 只要一个类是当前对象的类,那么最终结果就是True
print(ret)    # True

运行结果:

True
True
True

3、反射方法
python面向对象中的反射:通过字符串的形式操作对象相关的属性
python中的一切事物都是对象(都可以使用反射)
四个反射相关的函数
-hasattr :判断是否有此变量,返回bool 值
-getattr : 获取属性值或者获取方法变量的地址
-setattr :给类或者对象设置属性或者方法 (用的场合很少,了解即可)
-delattr: 删除类或者对象的属性或方法(用的场合很少,了解即可)

  • 反射类的属性和方法

  • 反射对象的属性和方法

  • 反射模块的属性和方法

      class Teacher(object):
          dict1={'查看学生的信息':'show_student','查看讲师信息':'show_Teacher'}
          def __init__(self,name,age):
              self.name=name
              self.age=age
          # 创建类方法
          @classmethod
          def func(cls):
              print('类方法')
    	  #创建 静态方法
      	  @staticmethod
      	  def func1():
          	  print('静态方法')
    
      	  def show_student(self):
              print('show_student...')
    
          def show_teacher(self):
              print('show_teacher')
    
     # 获取静态方法和类方法
     # 判断类中是否有dict1静态属性
     b=hasattr(Teacher,'dict1')
     print(b)   # True
     #获取属性dict1的值
      dict1 = getattr(Teacher, 'dict1')
      print(dict1)    # {'查看学生的信息':'show_student','查看讲师信息':'show_Teacher'}
      key = input('>>>')
      teacher = Teacher('zs', 10)
      ret=dict1.get(key,'')
      if ret:
          func = getattr(teacher, ret)  #获取方法变量地址
          func()
      
      else:
          print('不存在...')
    

运行结果:

True
{'a': 'show_student', 'b': 'show_Teacher'}
>>>a
show_student...


1.给A类添加静态age属性
class A(object):
    pass

setattr(A,'age',10)
print(A.age)      # 10

#2.给A类的对象添加name属性
a=A()
setattr(A,'name','zs')
print(A.name)      # zs

# 删除a对象中的age属性
a=A()
setattr(A,'name','zs')   #添加name属性
delattr(a,'name')        # 删除name属性
print(a.name)  # 报错


# 反射自己的属性
name = 'zs'
def func():
    print('zzz')

import sys
#print(sys.modules)  # 记录当前内存中已经被加载的模块
print(sys.modules['__main__'])
n=getattr(sys.modules['__main__'],'name')
print(n)

运行结果:

<module '__main__' from 'E:/homework/pythonworksplace/day17-面向对象/demon09-反射.py'>
zs


# 反射内置模块
import time
t=getattr(time,'time')  # 反射时间戳
print(t())

运行结果:

1547652615.4991376

猜你喜欢

转载自blog.csdn.net/weixin_44239541/article/details/86516710
今日推荐