面向对象
'''常用内置函数'''
#hasattr(实例对象,'属性')
#setattr(实例对象,'属性','具体属性内容')#不存在该属性就添加,存在该属性就更改
#delattr(实例对象,'属性')删除属性
#getattr(实例对象,'属性')得到属性,没有则报错
#issubclass(xxx,yyy)判断xxx是否是yyy的子类
#isinstance(xxx,(int,float))判断xxx是否是后面括号内的某种类型
# '''魔术方法'''
# class Earth:
# def __new__(cls, *args, **kwargs):
# if not hasattr(cls,'abc'):
# cls.abc=object.__new__(cls)
# return cls.abc#利用new写单例模式
# def __init__(self,name):
# self.name=name
# def __str__(self):#字符串输出
# return 'this is str %s'%self.name
# def __repr__(self):#原样输出
# return 'this is repr %r'%self.name
# def __call__(self,x,y, *args, **kwargs):#利用call方法,将类变成函数一样可以被调用
# print(x*y)
'''协议'''
# 序列类型协议
# class IndexTuple:
# def __init__(self,*args):
# self.values=tuple([i for i in args])
# self.index=tuple(enumerate(self.values))#enumerate枚举函数,作用是将下标和对应数据联系起来
# def __len__(self):
# return len(self.values)
# def __getitem__(self, key):
# return self.index[key][0]
# def __repr__(self):
# return str(self.values)
#迭代器协议
# li=[1,2,3,4]#列表是可迭代对象
# li1=iter(li)#将可迭代对象转换成迭代器,迭代器对象比普通对象多了iter和next方法
# class Number:
# def __init__(self,start,end):
# self.start=start
# self.end=end
#
# def __iter__(self):
# return self
# def __next__(self):
# self.start+=1
# if self.start>=self.end:
# raise StopIteration
# return self.start
#上下文协议
#只要类里面定义__enter__和__exit__两个方法,则可以用with去使用此对象
'''生成器'''
#利用yield可以将一个函数变成一个迭代器
#yield具有和return一样的功能,可以返回值,同时也会暂停函数的执行,直到下一次next执行,才会继续往下运行
#斐波那契数列:
# def fib(end):
# n,a,b=0,0,1
# while n<=end:
# a,b=b,a+b#同时赋值
# yield a#遇到yield会停下来,直到下一次next调用
# n+=1
'''装饰器'''
#装饰器本质上是一个函数,是闭包形式,在不改变原函数的基础上,增加额外的功能
# def func(f):
# def func1(*args,**kwargs):
# print('我是额外调用的功能')
# f()
# return func1
# @func
# def play():
# print('我是play函数的调用')
#内置装饰器
# class Stu:
# def __init__(self,name):
# self.name=name
#
# @property#让方法像属性一样被调用
# def play(self):
# print('这是play函数的调用')
#
# @classmethod#类方法
# def eat(self):
# print('这是一个eat函数的调用')
#
# @staticmethod#静态方法
# def sleep():
# print('这是一个sleep函数的调用')
'''异常处理'''
# try:#可能出现问题的代码
# print(m)
# except Exception as msg:#抛出或者返回异常
# print(msg)
# else:#没有报错就执行
# print('上面没有问题就执行')
# finally:#无论对错一定执行
# print('我是一定要执行的代码')
#断言使用 assert 与if判断类似,但判断为False的时候会报错,一般用于测试代码
2021-08-02 面向对象
于 2021-08-02 19:29:03 首次发布