1:使用__slots__//限制实例的属性
code
class Student(object):
__slots__ = ('name','score','set_age')
stu = Student()
stu.name = 'Zhangsan'
stu.score = 90
#stu.age = 20 无法添加该属性
print(stu.name) #正常打印
print(stu.score) #正常打印
#print(stu.age) 无法打印
Student.age = 20
print(stu.age) #正常打印
过上面我们发现使用__slots__限制的仅仅是类的实例的属性或者方法的动态添加,类本身的属性的添加不受__slots__的限制。
2:使用@property
@property 可以既检查参数, 又可以用类似属性的方式访问类的变量
code:
class Student(object):
@property
def score(self):
return self._score
@score.setter
def 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
s1=Student()
s1.score=100 #实际转化为s.set_score(100)
print(s1.score)#实际转化为s.get_score()
3:多重继承
通过多重继承,一个子类就可以同时获得多个父类的所有功能
Class 子类(父类1,父类2,...):
Pass
Code: 多重继承的时候要讲究顺序,先继承的在最左侧
class A(object):
def __init__(self):
self.name = 'A'
class B(object):
def __init__(self):
self.name = 'B'
class Student1(A,B,object):
pass
class Student2(B,A,object):
pass
AKaga1 = Student1()
print(AKaga1.name) #输出为A
AKaga2 = Student2()
print(AKaga2.name) #输出为B
4:定制类
__str__
__iter__
__getitem__
__getattr__
__call__
5:使用枚举类
6:使用元类
Type()
metaclass