Python高级2

多继承以及MRO

注意:继承不是复制!

  • mro 解决多继承关系中出现的二义性问题.
  • 快速确定mro(方法解析顺序)
  • 1.首先确定继承关系树状图;
  • 2.擦掉没有被指向的,并抹去其发出的指向箭头;
  • 3.同级的情况先继承左边的(极左原理),不同级的如果能确定左右关系先继承左边的,确定不了关系的继承下边的;
  • 4.重复以上操作.
  • 这种方法可快速确定继承顺序.

类属性,实例属性.

  • 类属性在内存中只保存一份,而实例属性在内存中根据对象的不同保存多份.

类方法,实例方法,静态方法.

  • 类方法:只能由类来调用,@classmethod表示.至少需要一个cls参数.
  • 实例方法:由对象调用,至少需要一个self参数.
  • 静态方法:由类调用,不需要默认参数.与类对象,实例对象无关.工具方法.
  • 实例对象可以调实例方法,类方法,静态方法;
  • 类对象只能调用类方法和实例方法.

Property属性

属性内部进行一系列的计算,返回一个值.

Property属性的两种方式

  • 1.装饰器
  • 1.1经典类:只有一种装饰器,即@property
  • 1.2新式类:有多种装饰器,即@property,@方法名.settler,@方法名.deleter,第一种是获取值,第二种是设置值,第三种是删除值,注意这三种值不代表同一个值.
  • 2.类属性
  • 创建一个值为property方法的返回值的类属性,这个类属性其实是一个property属性
  • 定义三个方法,分别为get_xx,set_xx,del_xx,分别对同一个属性进行获取,修改,删除,还有一个参数是对该属性进行说明,获取该属性的描述信息.
  • property属性的应用
  • 1.对私有属性添加getter和settler方法,可以对私有属性进行访问.并使用类属性方式创建一 个property属性,也可以采用装饰器的方式对一个方法进行装饰,此时可以从外部对私有属性进行访问.
  • 注意:如果考虑python版本的兼容性,类属性方式对于不同的版本是兼容的.

上下文管理器

  • 一个具有__enter__() 和 exit()方法的对象叫做上下文管理器
  • with + 上下文管理器对象+enter()方法的返回值,其中添加了with就可以自动管理上下文.
  • with 先判断后面的对象是不是上下文管理器;
  • 如果是上下文管理器,则调用__enter__()方法,将返回值赋予as后面的变量;
  • 使用该变量完成操作后,会自动调用__exit__()方法,即使遇到异常后也会关闭.
  • 示例:

上下文管理器

import socket
class SocketManager():
    def __init__(self,ip,port):
        self.addr = (ip,port)
    def __enter__(self):
        self.tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.tcp_socket.connect(self.addr)
        msg = input()
        self.tcp_socket.send(msg.encode())
        return self.tcp_socket
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.tcp_socket.close()
with SocketManager("127.0.0.1",8080) as s:
    s.send()
    s.recv()

`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值