《2018年6月30日》【连续263天】
标题:python面对对象进阶;
内容:
1.正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性:
绑定属性:
class Student(object):
pass
s =Student()
s.name ='Mike'
print(s.name)
绑定方法:
(实例s,其它实例无法使用)
from types import MethodType
def set_age(self,age):
self.age =age
s.set_age =MethodType(set_age, s)
s.set_age(20)
print(s.age)
类绑定方法:
Student.set_age =set_age
限制绑定:
class Student(object):
__slots__ = ('name', 'age')
2.@property
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
这里用了装饰器;
于是:
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
>>> s.score = 9999
Traceback (most recent call last):
...
ValueError: score must between 0 ~ 100!
3.定制类:
__str__()方法,确保类的print();
__iter__:列表;
4.元类:metaclass