python 面向对象高级编程 学习笔记

__slots__

可以给实例绑定属性和方法。

但是,给一个实例绑定的方法,对另一个实例是不起作用的。

所以为了让所有实例都能使用这个方法,应该给class绑定方法。

__slots__用来限制实例的属性,在定义class的时候,定义一个特殊变量slots,可以用来限制。

__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的。

除非在子类中也定义__slots,这样就也可以集成到父类所限制的属性。

property

绑定属性时应该保护属性不被轻易修改并且检查参数。

又能检查参数又能用类似属性这样简单的方式访问类的变量。

可以把一个getter方法变成属性。

@property的实现比较复杂,我们先考察如何使用。把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值

我们在对实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过getter和setter方法来实现的。

定义只读属性:只定义getter,不定义setter

多重继承

class xxx(第一个类,第二个类)类与类无关

这种设计被称为Mixln,给一个类增加多个功能,通过多重组合来组合多个类的功能。

java只允许单一继承。

定制类

__str__

__iter__ 一个类像list或tuple一样被for循环,就要实现一个这个函数,返回一个迭代对象,

这个对象用到类中定义的__next__函数来拿到循环的下一个值。遇到StopIteration错误时

返回。

__getitem__:按下标取元素,如果想取切片,记得要判断一下是不是slice,是的话再次处理

__getattr__动态返回一个没有定义的属性,也可以返回函数 return lambda就行

 

这实际上可以把一个类的所有属性和方法调用全部动态化处理了,不需要任何特殊手段。

这种完全动态调用的特性有什么实际作用呢?作用就是,可以针对完全动态的情况作调用。

__call__ 能对实例直接进行调用

使用枚举类

 

每个常量都是这个类的一个唯一实例,Enum类

可以枚举它的所有成员。

value属性则是自动赋给成员的int常量,默认从1开始计数。

可以从Enum派生出自定义类,@unique可以检查是否有重复值。

使用元类

type()函数可以查看一个类型或变量的类型。

我们说class的定义是运行时动态创建的,而创建class的方法就是使用type()函数。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值