2021-08-02 面向对象

面向对象
'''常用内置函数'''
#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的时候会报错,一般用于测试代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值