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))方法
  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/wqzn/p/9562058.html
Copyright © 2011-2022 走看看