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

    特殊成员补充:

    1.__str__

    2.__doc__:查看"""   """所注释的内容

    3.__dict__:把所传的值以字典的形式打印出来

    class Foo(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def func(self):
            pass
    
    
    obj1 = Foo('刘博文', 99)
    obj2 = Foo('史雷', 89)
    
    print(obj1.__dict__)  # {'name': '刘博文', 'age': 99}
    print(obj2.__dict__)  # {'name': '史雷', 'age': 89}

    4.__iter__  把不可迭代对象 -> 可迭代对象

    class Foo(object):

    def __iter__(self):
    return iter([123,456])
    obj=Foo()
    for el in obj:
    print(el )

     练习题:

    一.
    class
    Starkconfig(object): list_display=[] def get_list_display(self): self.list_display.insert(0,999) return self.list_display class Roleconfig(Starkconfig): list_display = [11,22] s1=Starkconfig() ret=s1.get_list_display() print(ret) ret2=s1.get_list_display() print(ret2) [999] [999, 999]
    二.
    class StarkConfig(object):
    list_display = []

    def get_list_display(self):
    self.list_display.insert(0,33)
    return self.list_display

    class RoleConfig(StarkConfig):
    list_display = [11,22]
    s1 = StarkConfig()
    s2 = StarkConfig()
    result1 = s1.get_list_display()
    print(result1)
    result2 = s2.get_list_display()
    print(result2)

    [33]
    [33,33]
    三.
    class StarkConfig(object):
    list_display = []

    def get_list_display(self):
    self.list_display.insert(0,33)
    return self.list_display
    class RoleConfig(StarkConfig):
    list_display = [11,22]
    s1 = StarkConfig()
    s2 = RoleConfig()
    result1 = s1.get_list_display()
    print(result1)
    result2 = s2.get_list_display()
    print(result2)
     [33]
    [33, 11, 22]
    四.
    class StarkConfig(object):
    list_display = []

    def get_list_display(self):
    self.list_display.insert(0,33)
    return self.list_display
    class RoleConfig(StarkConfig):
    list_display = [11,22]
    s1 = RoleConfig()
    s2 = RoleConfig()
    result1 = s1.get_list_display()
    print(result1)
    result2 = s2.get_list_display()
    print(result2)
    [33, 11, 22]
    [33, 33, 11, 22] 

     #########################################################################

    1.issubclass  type   isinstance:

    <1.issubclass  :检查第一个参数(子类)是否是第二个参数(父类)的 子子孙孙类

    class a:
        pass
    class b(a):
        pass
    class c(b):
        pass
    print(issubclass(b,a))
    print(issubclass(c,b))
    print(issubclass(c,a))****
    
    True
    True
    True

    <2.type :获取当前的对象是由那个类创建的

    class Foo(object):
        pass
    class Bar(object):
        pass
    def func(*args):
        foo_conter=0
        bar_conter=0
        for el in args:
            if type(el)==Foo:
                foo_conter+=1
            elif type(el )==Bar:
                bar_conter+=1
        return foo_conter,bar_conter
    ret1,ret2=func(Foo(),Foo(),Bar())
    print(ret1,ret2)
    2   1

     <3.isinstance :检查第一个参数(对象)是否是第二个参数(以及父类)的实例、

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

    练习:给你一个参数,判断对象是不是由某一个指定类? type --> type(obj) == Foo
    给你一个参数,判断对象是不是由某一个指定类或其父类? isinstance

     方法和函数:

    对象.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('不知道是什么')

     反射*****

    可以在模块中使用,也可以在面向对象中使用

    模块:
    from
    types import FunctionType import handler while True: print(""" 系统支持的函数有: 1. f1 2. f2 3. f3 4. f4 5. f5 """) val = input("请输入要执行的函数:") # val = "f1" if hasattr(handler, val):#检查handler中是否有val的值 hasattr func_or_val = getattr(handler, val) # 根据字符串为参数,去模块中寻找与之同名的成员。***** if isinstance(func_or_val, FunctionType):#判断func_or_val是不是以一个方法 func_or_val() else: print(func_or_val) else: print('handler中不存在输入的属性名')

    面向对象:
    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()

     总结:

    getattr # 根据字符串的形式,去对象中找成员。
    hasattr # 根据字符串的形式,去判断对象中是否有成员。
    setattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存)
    delattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存)

    是否可以被调用:

    类()

    对象()

    函数()

    方法()

    def func():
        pass
    class Foo(object):
        def __call__(self, *args, **kwargs):
            pass
        def func(self):
            pass
    obj = Foo()
    print(callable(func))函数
    print(callable(Foo))类
    print(callable(obj))对象
    print(callable(obj.func))方法
  • 相关阅读:
    关于Java 下 Snappy压缩存文件
    英文分词和中文分词
    vuex requires a Promise polyfill in this browser
    Vue 中 export default 和 module.exports
    Linux 进程以及多线程的支持
    mysqldump
    linux磁 盘分区 挂载
    ubuntu16.04挂载windows NTFS磁盘方法
    Linux服务管理 systemctl命令详解
    nextcloud 安装
  • 原文地址:https://www.cnblogs.com/wqzn/p/9562058.html
Copyright © 2011-2022 走看看