zoukankan      html  css  js  c++  java
  • 面向对象---两个内置函数和一些内置方法

    一 两个内置函数

     issubclass(子类,父类) #判断两个类是否是继承关系 ,返回True或False
    isinstance(对象,类) # 判断 对象是不是 类 这类事物,这个东西换可以判断某个东西是不是某个类及其父类的对象
    type # 也可以判断某个东西是不是某个类及其父类的对象,但是这个只能判断一层,
    简单例子:
    class A(object):pass
    class B(A):pass
    b=B()
    print(isinstance(b,A)) # True
    print(type(b)is B) #True
    print(type(b)is A) #False

    二 简单回顾反射

    class A:
    # def __init__(self,name,age):
    # self.name=name
    # self.age=age
    # a=A('张三',90)
    # ret=input('>>>')
    # if hasattr(a,ret):
    # print( getattr(a,ret)) # 把某个对象的某个属性或方法直接拿出来

    三  一些 内置方法: (上下划方法,魔术方法)

    内置方法的特点, 一定有某一个语法或者写法自动触发这个方法

    一些重点的:

    1.单例模式:(构造方法)  __new__

    顾明思议 (只能实例化一个对象)

    例子:

    class Teacher(object):
        flag=None
        def __new__(cls, *args, **kwargs): # __new__本身不会自己创建
            if cls.flag is None:#  为什么此处是cls而不是self 因为self就是__new__创建出来的所以在这换没有self,所以只能用类本身(Teacher)
                cls.flag=object.__new__(cls) # 所以他得调用父类的方法来帮他创建对象空间
            return cls.flag # 此时就是一个对象的空间(地址)
        def __init__(self):
            print(self) # <__main__.Teacher object at 0x0000018911A07550>
    a=Teacher()  #
    print(a) # <__main__.Teacher object at 0x0000018911A07550>
    # 得出结论: __new__返回的结果就是将来为你这个对象实例化后的地址,所以 他是在你__init__执行之前所自动触发的
    # 这个方法,意思是 先有__new__再执行__init__

    2 析构方法;(对象删除之前的收尾工作)

    class Teacher:
        def __init__(self,name):
            self.name=name
        def __del__(self):
            print('我还在')
    a=Teacher('张三')
    del a  # 也就是说在执行这个del 删除方法之前他会先走__del__方法然后在删除,如果我们自己不删除a程序在执行过程中或最后,垃圾回收机制会替你执行del a
    print(a)

    3 __call__  (他可以让你的方法直接用对象加括号调用)

    class St():
        def __init__(self):
            pass
        def __call__(self, *args, **kwargs):
            print('调用我了')
    
    a=St()
    a()  # 对象加括号就可以调用他    调用我了
    结论: 这是内置的 一般我们都是对象名点方法调用某个方法的  知道就行了

    4  __str__  让一个对象显示更清晰

    class Course:
        def __init__(self,name,price,period,teacher):
            self.name = name
            self.price = price
            self.period = period
            self.teacher = teacher
        # def cs(self):
        #     return self.name,self.price
        #    print( self.name,self.price)
        def __str__(self):  # 必须有返回值,必须返回一个str类型    #  高级点
            return '%s,%s,%s,%s'%(self.name,self.price,self.period,self.teacher)  # 这么写直接打印对象就能输出出来
    course_lst = []
    python = Course('python',19800,'6 months','baoyuan')
    linux = Course('linux',16800,'5 months','oldboy')
    course_lst.append(python)
    course_lst.append(linux)
    # print(python)
    # print(str(python))
    # print('课程展示 : %s'%python)
    # for i in course_lst:
        # print(i.cs())
        # i.cs()
    print(python)  # python,19800,6 months,baoyuan
    print(linux)  # linux,16800,5 months,oldboy


  • 相关阅读:
    numpy、torch:[ ]里传函数,数组过滤
    torch:torch.sort
    torch : transpose,transpose_
    托管堆和垃圾回收笔记
    UdpClient类客户端和服务端demo
    JavaScript阻止事件冒泡
    单元测试初接触
    CSS选择器
    文档onload处理程序
    TASKKILL命令使用方法
  • 原文地址:https://www.cnblogs.com/systemsystem/p/10029243.html
Copyright © 2011-2022 走看看