面向对象---两个内置函数和一些内置方法

一 两个内置函数

 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


原文地址:https://www.cnblogs.com/systemsystem/p/10029243.html