面向对象
1.初级
class student:
def __init__(self,name,age):
self.name=name
self.age=age
class student:
def set_name(self,name):
self.name=name
def get_name(self):
return self.name
def set_age(self,age):
self.age=age
def get_name(self):
return self.name
stu=student()
stu.set_name='lx'
stu.set_age=16
2高级面向对象
1.__slots__
其中'_'是将变量私有,而‘__’是避免子类将其覆盖
将外部的属性,方法和实例绑定,MethodType
from types import MethodType
class student:
pass
def set_name(self,name):
self.name=name
stu=student()
stu.set_name=MethodType(set_name,stu)
stu.set_name('lx')
__slots__将绑定的属性或者方法限制
限制实例的属性
class student:
__slots__=('name')
def set_name(self,name):
self.name=name
def set_age(self,age):
self.age=age
stu=student()
stu.set_name=MethodType(set_name,stu)
stu.set_name('lx')
stu.set_age=MethodType(set_age,stu)
stu.set_name(16)
print(stu.name,stu.age)
报错
2@property将一个方法变成一个属性
class student:
@property
def score(self):
return self._score
@score.setter
def score(self,value):
if not isinstance(value,int):
raise ValueError('score must be a integer')
elif value<0 or value>100:
raise ValueError('score must be between 0 to 100')
self._score=value
@score.setter是对属性的具体化,要求细化