zoukankan      html  css  js  c++  java
  • 面向对象4

    1.issubclass/isinstance/type

      1.issubclass:

     1 class Base(object):
     2     pass
     3 
     4 class Foo(Base):
     5     pass
     6 
     7 class Bar(Foo):
     8     pass
     9 
    10 print(issubclass(Foo,Base))
    11 print(issubclass(Bar,Base))
    12 #检查第一个参数是否是第二个参数的子类

    2.isinstance

    1 class Base(object):
    2     pass
    3 
    4 class Foo(Base):
    5     pass
    6 
    7 obj1 = Foo()
    8 print(isinstance(obj1,Foo))#检查第一个参数(对象)是否是第二个参数(类及父类)的实例
    9 print(isinstance(obj1,Base))#检查第一个参数(对象)是否是第二个参数(类及父类)的实例

    3.type

    1 class Foo(object):
    2     pass
    3 
    4 obj = Foo()
    5 
    6 print(obj,type(obj))#获取当前对象是由哪个类创建
    7 
    8 if type(obj) == Foo:
    9     print("obj是Foo类型")

    总结:

    给一个参数,判断这个类是不是有某一个指定类或其父类  issubclass

    给一个参数,判断对象是不是有某一个指定类或其父类  isinstance

    给一个参数,判断对象是不是有某一个指定类  type

    2.方法和函数的检验

    对象.xxx  -->xxx就是方法

    类.xxx   -->xxx就是函数

    xxx     -->xxx就是函数


    代码查看:

     1 from types import MethodType,FunctionType
     2 
     3 def check(arg):
     4     """
     5     检查arg是方法还是函数
     6     """
     7     if isinstance(arg,MethodType):
     8         print("arg是一个方法")
     9     elif isinstance(arg,FunctionType):
    10         print("arg"是一个函数)
    11     else:
    12         print("其他")

    3.反射

      1.反射--模块

      handler.py:

     1 def f1():
     2     print("F1")
     3 def f2():
     4     print("F2")
     5 def f3():
     6     print("F3")
     7 def f4():
     8     print("F4")
     9 def f5():
    10     print("F5")
     1 import handler
     2 
     3 while True:
     4     print("""
     5     系统支持的函数有:
     6     1.f1
     7     2.f2
     8     3.f3
     9     4.f4
    10     5.f5
    11 """)
    12     val = input("请输入要执行的函数:")
    13     if hasattr(handler,val):
    14         func_val = getattr(handler,val)#根据字符串为参数,去模块中寻找与之同名的成员
    15         if isinstance(func_val):
    16             func_val()
    17         else:
    18             print(func_val)
    19     else:
    20         print("handler中不存在输入的属性名")

    2.反射--面向对象

    1 class Foo:
    2     a = 1
    3     def func(self):
    4         pass
    5 
    6 v = getattr(Foo,'func')#根据字符串为参数,去类中寻找与之同名的成员
    7 print(v)

    getattr  根据字符串的形式,去对象中找成员

    hasattr  根据字符串的形式,去判断对象中是否有成员

    setattr  根据字符串的形式,动态的设置一个成员

    delattr  根据字符串的形式,动态的删除一个成员

    4.是否可以被调用

     1 def func():
     2     pass
     3 
     4 class Foo(object):
     5     def __call__(self,*args,**kwargs):
     6         pass
     7 
     8     def func(self):
     9         pass
    10 
    11 obj = Foo()
    12 
    13 print(callable(func))#True
    14 print(callable(Foo))#True
    15 print(callable(obj))#True
    16 print(callable(obj.func))#True
  • 相关阅读:
    原生JS发送Ajax请求、JSONP
    python Flask中html模版中如何引用css,js等资源
    python 单例与数据库连接池 及相关选择
    费曼致学生真野光一
    Winform判断EventHandler是否已经添加
    The list of pre-build cross-compiler
    Extended VM Disk In VirtualBox or VMware (虚拟机磁盘扩容)
    一张图了解SSH端口转发
    显卡驱动卸载清理工具
    Oracle分析函数
  • 原文地址:https://www.cnblogs.com/s593941/p/9570815.html
Copyright © 2011-2022 走看看