一点点小刀刀
晚上收到了某招聘软件的 HR 的消息,心里慌的不行。因为很想换岗位了,可是当机会来的时候,我却只能表示能力不行。所以要速速的加油了!!!
开始学习的分割
日常一点点小鸡血!请不要假装努力,结果不会陪你演戏。
面向对象高级编程
使用 @property
Python 内置的 @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
加上 @property 后就变成了 getter 的方法,@property 本身又创建了另一个装饰器 score.setter, 负责把一个 setter 方法变成属性赋值。
只定义 getter 方法,不定义 setter 方法就是一个只读属性
做个作业~
多重继承
通过多重继承,一个子类可以继承多个父类的属性与方法。
class Father(object):
pass
class Mother(object):
pass
class children(Father,Mother):
pass
#这样孩子就同时继承了爸爸和妈妈的属性
MixIn
设计继承关系的时候,多重继承的设计被成为 MixIn。所以在上面的代码中,我们可以考虑把 Father 改为 FatherMixIn 来更好的看出继承关系。
class FatherMixIn(object):
pass
class MotherMixIn(object):
pass
class children(FatherMixIn,MotherMixIn):
pass
MixIn 的目的就是给一个类增加多种功能, 所以在设计类的时候,尽量考虑多重继承,少用复杂的多层次的类的继承。
Python 自带的很多库也使用了 MixIn。举个例子,Python 自带了 TCPServer 和 UDPServer 这两类网络服务,而要同时服务多个用户就必须使用多进程或多线程模型,这两种模型由 ForkingMixIn 和 ThreadingMixIn 提供。通过组合,我们就可以创造出合适的服务来。
很多语言仅有单一继承的情况,如 Java。
定义类
__str__ 定义__str__方法,可以打印的好看
直接显示变量调用的不是__str__(),而是__repr__(),两者的区别是__str__() 返回用户看到的字符串,而__repr__() 返回程序开发者看到的字符串,也就是说,__repr__() 是为调试服务的。
__iter__ 定义__iter__方法,在被用于 for…in 循环时返回迭代对象,for 循环会不断的调用__next__() 方法拿到下一个值,直到 5 终止。
__getitem__ 定义__getitem__方法,让实例变成 list,但并不是真实的 list,所以通过定义,让它变得像 list 一样可操作性。要正确实现一个__getitem__() 还是有很多工作要做的, 因为传入的参数可能不是 int。
__getattr__ 可以尝试链式调用,这个等我明天脑子清晰的时候详细研究下。代码先贴
class Chain(object):
def __init__(self, path=”):
self._path = path
def __getattr__(self, path):
return Chain(‘%s/%s’ % (self._path, path))
def __str__(self):
return self._path
__repr__ = __str__
#无论 API 怎么变,SDK 都可以根据 URL 实现完全动态的调用
__call__
还得看第二遍 … 明天一定要弄懂了
晚安~