廖雪峰Python教程 学习笔记11 面向对象高级编程
2016-10-24 11:29
1081 查看
1,_ slots_ (注意前后各有两个下划线)
定义class时,用来限制class实例能添加的属性 class Animal(object): __slots__ = ('name','age') a = Animal() a.name = 'Dog' a.age = 10 a.sex = 'M' #这一句会出错 __slots__ 定义的属性仅对当前类实例起作用,对继承的子类时不起作用的。但如果在子类中也定义了__slots__ 这样,子类实例允许定义的属性就是自身的__slots__ 加上父类的 __slots__
2,@property (注意前面有个@号)
可以使得实例能够以 “对象名.属性名”来访问属性,又可以进行参数检查(如:是否为合法的年龄) class Student(object): @property def age(self): return self._age @age.setter def age(self,value): if not isinstance(value,int): raise ValueError('age must be an integer!') self._age = value
3,多重继承
在Python中,类可以继承多个父类。一般会有一个主要继承的类和若个其它次要或后续添加的类。如‘狗’继承‘动物’,同时也继承‘会跑的事物’。次要继承的类的名称通常被加上MixIn后缀。如:class Dog(Animal,RunableMixIn): pass class Animal(object): pass class RunableMixIn(object): pass
4,定制类
_ str _(注意前后各有两个下划线)
使得print对象时,输出指定信息 class Student(object): def __init__(self,name): self.name = name def __str__(self): return 'Student object (name: %s)' % self.name print(Student('Bob')) #输出: Student object(name: Bob)
_ repr_(注意前后各有两个下划线)
使得在shell直接输入对象名字时也输出指定信息 lass Student(object): def __init__(self,name): self.name = name def __repr__(self): return 'Student object (name: %s)' % self.name Student('Bob') #输出: Student object(name: Bob)
_ iter_(注意前后各有两个下划线)
实现iter()可以使得类能被用于for…in循环,该方法返回一个可迭代对象,for循环会不断地调用该对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。class Fib(object): def __init__(self): self.a, self.b = 0, 1 def __iter__(self): return self def __next__(self): self.a, self.b = self.b, self.a + self.b if self.a > 100000: #为了for循环能结束 raise StopIteration() return self.a #测试代码 for n in Fib(): #输出100000以内的斐波那契数列 print(n)
相关文章推荐
- 【Python】学习笔记——-8.3、面向对象高级编程:3.多重继承
- 【Python】学习笔记——-8.5、面向对象高级编程:5.使用枚举类
- python学习笔记(七) - 面向对象高级编程
- Python学习--11 面向对象高级编程
- 【Python】学习笔记——-8.4、面向对象高级编程:4.定制类
- 初学Python的学习笔记9----面向对象编程(获取对象信息、实例属性和类属性)、面向对象高级编程(使用__slots__、使用@property)
- 面向对象高级编程——Python学习笔记08
- Python学习笔记 - 面向对象高级编程
- 【Python】学习笔记——-8.1、面向对象高级编程:1.使用__slots__
- 廖雪峰Python教程1轮还没学明白的(2) -- 面向对象高级编程 -- 定制类 -- 实现Fib数列的__getitem__()/切片方法
- 廖雪峰python学习笔记9:面向对象高级
- 【Python】学习笔记——-8.2、面向对象高级编程:2.使用@property
- 廖雪峰Python教程1轮还没学明白的(3) -- 面向对象高级编程 -- 定制类 -- __getattr__之链式调用
- python2.7学习笔记(10) ——面向对象高级编程
- 【Python】学习笔记——-8.6、面向对象高级编程:6.使用元类
- Python面向对象高级编程——学习笔记
- 廖雪峰Python教程1轮还没学明白的(1) -- 面向对象高级编程 -- 定制类 -- 斐波那契数列
- Python学习系列:面向对象高级编程(-)
- Geekband_C++面向对象高级编程_第五周学习笔记
- Python3.X之面向对象高级编程笔记