基础过了一遍下来,感觉前面的又有点忘了。所以还是得以实战为主,基础知识当做手册来查,这样可能会好点,程序写多了,自然很多东西就记住了。
贴一些简单例子。留个笔记
1
class Student(object):
__slots__=('name','age')
S=Student()
S.name='liu'
S.age=22
S.score=11
#这里会报错,因为 __slots__限定了这类的属性只有name和age
#所以__slots__的作用很明显了
#看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。
#__slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数。这里涉及到的就是定制类
2 定制类,按我的理解。
比如,我们要用for….in 来循环一个类,但是首先,这个类必须是可迭代的。那怎么办呢?我们就要用到上面说到的有特殊用途的函数,这里要可迭代,那我们就要用到iter方法,改方法返回一个可迭代的对象。然后还要用到next方法拿到循环的下一个值
我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:
class Fib(object):
def init(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b
def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己
def __next__(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > 100000: # 退出循环的条件
raise StopIteration()
return self.a # 返回下一个值
所以,按个人理解就是,你想对这个类做什么操作,首先,这个类要有这样的功能,如果没有,那么我们可以通过python的特殊函数,来定制出来这个类
3 @property
class Screen(object):
@property
#设置width属性可读
def width(self):
return self._width
#self._width可操作对象的访问限制来理解,加上下划线 _ ,限制了改对象无法读写,需另设置方法来读取和更改。而这里用@property装饰器来处理,功能一样,而且更简化。
@width.setter
#设置widrh属性可写
def width(self,value):
self._width=value
@property
def height(self):
return self._height
@width.setter
def height(self,value):
self._height=value
@property
def resolution(self):
return self._height*self._height
s = Screen()
s.width = 1024
s.height = 768
print('resolution =', s.resolution)
if s.resolution == 786432:
print('test sucess')
else:
print('test fff')
4 枚举类
from enum import Enum,unique
@unique
class Student(Enum):
male=0
fmale=1
print Student.fmale.value
遇到一些常用的,固定的,比如月份。可以设置枚举类,然后需要用的时候直接调用该类的对象来使用即可。而且还可以直接获取实例属性的信息和对应的值
5 多重继承
多重继承,打个比喻,有两个类,会飞的动物类,会跑的动物类。然后有一个动物类既会飞,又会跑,那么它可以直接继承这两个类。这样就有了飞和跑的方法了
PS:这里面很多知识都是参照 廖雪峰的python