zoukankan      html  css  js  c++  java
  • 面向对象【进击篇】

    其他相关

    一、isinstance(obj, cls)

     检查是否obj是否是类 cls 的对象,检查第一个参数(对象)是否是第二个参数(类及父类)的实例。

    class Base(object):
        pass
    
    class Foo(Base):
        pass
    
    obj1 = Foo()
    print(isinstance(obj1, Foo))  # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
    print(isinstance(obj1, Base))  # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
    
    obj2 = Base()
    print(isinstance(obj2, Foo))  # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
    print(isinstance(obj2, Base))  # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。

    二、issubclass(sub, super)

    检查sub类是否是 super 类的派生类

    class Base(object):
        pass
    
    class Foo(Base):
        pass
    
    class Bar(Foo):
        pass
    
    print(issubclass(Bar, Base))  # 检查第一个参数是否是第二个参数的子子孙孙类

    三、type:获取当前对象是由哪个类创建

    class Foo(object):
        pass
    
    obj = Foo()
    print(obj, type(obj))  # 获取当前对象是由那个类创建。
    if type(obj) == Foo:
        print('obj是Foo类型')

    四、方法和函数

       称谓:
    类,方法
    外,函数
    到底方法函数?
    对象.xxx --> xxx就是方法
    类.xxx --> xxx就是函数
    xxx --> xxx就是函数
    打印查看:
    function
    method
    from types import MethodType,FunctionType
    def check(arg):
     """
     检查arg是方法还是函数?
     :param arg:
     :return:
     """
     if isinstance(arg,MethodType):
        print('arg是一个方法')
     elif isinstance(arg,FunctionType):
        print('arg是一个函数')
     else:
        print('不知道是什么')
    代码检查

    五、反射

    a. 需求

    总结:
    v = getattr(obj,"func") # 根据字符串为参数(第二个参数),去对象(第一个参数)中寻找与之同名的成员。

    练习题:
    ..

    好记:
    getattr # 根据字符串的形式,去对象中找成员。
    hasattr # 根据字符串的形式,去判断对象中是否有成员。
    setattr # 根据字符串的形式,动态的设置一个成员(内存)
    delattr # 根据字符串的形式,动态的删除一个成员(内存)
    应用一:
    # by luffycity.com
    from types import FunctionType
    import handler

    while True:
    print("""
    系统支持的函数有:
    1. f1
    2. f2
    3. f3
    4. f4
    5. f5
    """)
    val = input("请输入要执行的函数:") # val = "f1"

    # 错误
    # handler.val()
    if hasattr(handler,val):
    func_or_val = getattr(handler,val) # 根据字符串为参数,去模块中寻找与之同名的成员。
    if isinstance(func_or_val,FunctionType):
    func_or_val()
    else:
    print(func_or_val)
    else:
    print('handler中不存在输入的属性名')

    # 正确方式
    """
    if val == 'f1':
    handler.f1()
    elif val == 'f2':
    handler.f2()
    elif val == 'f3':
    handler.f3()
    elif val == 'f4':
    handler.f4()
    elif val == 'f5':
    handler.f5()
    """

    应用二:

    class Account(object):
    func_list = ['login', 'logout', 'register']

    def login(self):
    """
    登录
    :return:
    """
    print('登录111')

    def logout(self):
    """
    注销
    :return:
    """
    print('注销111')

    def register(self):
    """
    注册
    :return:
    """
    print('注册111')

    def run(self):
    """
    主代码
    :return:
    """
    print("""
    请输入要执行的功能:
    1. 登录
    2. 注销
    3. 注册
    """)

    choice = int(input('请输入要执行的序号:'))
    func_name = Account.func_list[choice-1]

    # func = getattr(Account,func_name) # Account.login
    # func(self)

    func = getattr(self, func_name) # self.login
    func()

    obj1 = Account()
    obj1.run()

    obj2 = Account()
    obj2.run()
  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/shanae/p/9560283.html
Copyright © 2011-2022 走看看