本文主要是介绍【七月Python入门】 第六课高级面向对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.方法和属性的动态绑定:使用__slots__限定class实例能添加的属性。__slots__仅对当前类实例起作用,对继承的子类是不起作用的。
2.property:将类方法转换为只读属性 或 重新实现一个属性的setter和getter方法。
from decimal import Decimal########################################################################
class Fees(object):""""""#----------------------------------------------------------------------def __init__(self):"""Constructor"""self._fee = None#----------------------------------------------------------------------@propertydef fee(self):"""The fee property - the getter"""return self._fee#----------------------------------------------------------------------@fee.setterdef fee(self, value):"""The setter of the fee property"""if isinstance(value, str):self._fee = Decimal(value)elif isinstance(value, Decimal):self._fee = value#----------------------------------------------------------------------
if __name__ == "__main__":f = Fees()
3. __iter__:如果一个类想被用于
for ... in
循环,类似list或tuple那样,就必须实现一个__iter__()
方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()
方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。
class Fib(object):def __init__(self):self.a, self.b = 0, 1 # 初始化两个计数器a,bdef __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 # 返回下一个值
__call__()
方法,就可以直接对实例进行调用。通过callable()
函数,我们就可以判断一个对象是否是“可调用”对象。
class Student(object):def __init__(self, name):self.name = namedef __call__(self):print('My name is %s.' % self.name)
调用方式如下:
>>> s = Student('Michael')
>>> s()
My name is Michael.
>>> callable(Student())
True
>>> callable(max)
True
>>> callable([1, 2, 3])
False
>>> callable(None)
False
>>> callable('string')
False
5.错误与异常处理: Python内置的
try...except...finally
用来处理错误十分方便。出错时,会分析错误信息并定位错误发生的代码位置才是最关键的。
程序也可以主动抛出错误,让调用者来处理相应的错误。但是,应该在文档中写清楚可能会抛出哪些错误,以及错误产生的原因。finally 不管异常是否发生都会执行。
6.测试: 为了编写单元测试,我们需要引入Python自带的unittest
模块
import unittestfrom mydict import Dictclass TestDict(unittest.TestCase):def test_init(self):d = Dict(a=1, b='test')self.assertEqual(d.a, 1)self.assertEqual(d.b, 'test')self.assertTrue(isinstance(d, dict))def test_key(self):d = Dict()d['key'] = 'value'self.assertEqual(d.key, 'value')def test_attr(self):d = Dict()d.key = 'value'self.assertTrue('key' in d)self.assertEqual(d['key'], 'value')def test_keyerror(self):d = Dict()with self.assertRaises(KeyError):value = d['empty']def test_attrerror(self):d = Dict()with self.assertRaises(AttributeError):value = d.empty
这篇关于【七月Python入门】 第六课高级面向对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!