声明:资源来自慕课网python学习课程,以下只是个人学习总结,仅供参考

1.Python类的特殊方法

  特征:以  __ 开头并结尾的方法,比如用于print的__str__() , __getattr__(),__setattr__()等

       不需要在代码中直接调用, Python的某些函数和操作符会自动调用。

     可以自己定制实现,如__str__()方法

class Person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
def __str__(self):
return '(Person: %s , %s )' % (self.name,self.gender)
print Person("Roger","Male")

    python定义了__str__() 和 __repr__()两个方法,前者显示给用户, 后者显示给开发人员,所以如果在交互命令行下修改了__str__(),再调用的话可能会没有调用修改的,而是调用了__repr__()。也可以让两个方法相同: __repr__ = __str__

2.特殊的setter和getter

  在python中对应setter和getter可以由装饰器来写,从而使得调用的时候显得比较直接;当然,使用java中类似的方式也可以。由于python支持高阶函数,所以可以用装饰器把get/set方法装饰成属性。

class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property #装饰get方法
def score(self):
return self.__score
@score.setter #装饰set方法,是@property装饰后的副产品
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
#装饰之后,可以想使用属性一样设置score了
s = Student("Bob",59)
s.score = 60
print s.score
s.score = 1000
print s.score #会有异常,因为检查了score的范围

3.限制当前类所能拥有的属性: __slots__

class Student(object):
__slots__ = ('name', 'gender', 'score')
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score

4.可调用对象(对象也能调用)

  Python中函数是对象,称为可调用对象,一个类的实例也可以变成一个可调用对象,只需要实现一个特殊的方法  __call__()

class Person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
def __call__(self, *args, **kwargs): #实现__call__方法让实例可被调用
print args
class Fib(object):
def __call__(self, num):
a, b, L = 0, 1, []
for n in range(num):
L.append(a)
a, b = b, a + b
return L
f = Fib()
print f(10)

最新文章

  1. eclipse 启动到loading workbench... 自动关闭
  2. tomcat集群学习记录1--初识apache http server
  3. 使用D3制作图表(1)--画布绘制
  4. java的 clone方法
  5. C# 4.0中dynamic的作用
  6. 1346. Intervals of Monotonicity(dp)
  7. java 中间 final修饰符
  8. JS中for循序中延迟加载实现动态效果
  9. 使用SQL存储过程有什么好处 用视图有什么好处
  10. ADO.NET复习总结(2)--连接池
  11. 【简】题解 AWSL090429 【市场】
  12. 动态改变Spring定时任务执行频率
  13. Visual Studio 2017 激活密钥 [复制记录]
  14. 二分搜索-HihoCoder1128
  15. POI HSSFCellStyle 设置 Excel 单元格样式
  16. 【Luogu P2764】最小路径覆盖问题
  17. 关于video.js不错的一篇博客,
  18. jsp 内置对象(五)
  19. 无法获取 vmci 驱动程序版本: 句柄无效
  20. 内部存储 openFileInputStream openFileOutputStream

热门文章

  1. python--logging库学习_第一波
  2. JavaScript中的跨域详解(一)
  3. MessageBox 函数
  4. 呕心沥血Android studio使用JNI实例
  5. GeoServer之styles定制
  6. C#开发之反射的简单使用
  7. python学习——练习题(12)
  8. 「小程序JAVA实战」小程序的flex布局(22)
  9. js生成元素的事件不执行问题
  10. iOS布局之Auto Layout