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