1、__slots__ 限制实例添加属性
class Car:
name='Mary'
def __init__(self,color):
self.color = color
def set_weight(self,weight):
self.weight = weight
car = Car("blue") # 通过初始化 设置属性值
car.set_weight(300) #通过方法 设置属性值
car.name ='Bob' #直接赋值给属性(类属性name或实例属性weight)
car.size = 3 #可以为实例添加类中不存在的属性
#用__slots__ 限制实例添加属性
class Student(object):
__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
2、自定义抛出错误
def set_score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
3、多重继承MixIn
class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
pass
4、定制类
__str__(self) : 定制返回信息,类似于Java里类的toString()方法
__iter__(self) : 用于for...in 循环
__getitem__(self) : 取第n个元素
__getattr__(self,attr) : 动态返回一个属性,动态URL调用
5、枚举类Enum(
from enum impor Enum
)
from enum import Enum
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
print(Month(1)) #Month.Jan
print(Month(1).name) #Jan. 每一个枚举类默认有一个value,从1开始.
for name, member in Month.__members__.items():
print(name, '=>', member, ',', member.value) # Jan => Month.Jan , 1
6、元类【未完待续】
声明:学习廖雪峰的Python教程——面向对象高级编程章节后的学习笔记,感谢Micheal Liao.