1、使用__slots__限制属性:
class Student(object):
pass
s= Student()
s.name="Jack"
def set_name(self,name):
self.name=name
from types import MethodType
s.set_name=MethodType(set_name,s)
s.set_name("Hello")
给class 绑定方法
def set_age(self,age):
self.age=age
Student.set_age=set_age
这样所有Student实例都可调用该方法
如要限制实例的属性,可以使用slots
class Student(object):
__slots__=('name','age')
除非在子类中也定义 __slots__
class MidStudent(Student):
__slots__=("height","weight")
这样就拓展了限制属性
2、使用@property 装饰属性,实现get/set
class Student(object):
@property
def age(self):
return self._age
@age.setter
def age(self,age):
if not isinstance(age,int):
raise ValueError("Age must be an Integer")
self._age=age
3、多重继承/MixIn
class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
pass