廖雪峰python学习笔记9:面向对象高级
2016-07-12 10:23
841 查看
# -*- coding: utf-8 -*- #动态语言很方便,当我们定义了一个class的实例后 #可以给它绑定任何属性和方法,这就是动态语言的灵活性 class Student(object): pass #绑定各种属性 st = Student() st.name = 'Leo' st.major = 'Network Engineering' st.score = 99 #当然,也可以绑定方法 def set_age(self, age): self.age = age from types import MethodType #绑定方法 st.set_age = MethodType(set_age, st) st.set_age(19) print(st.age) #为了给所有实例都绑定方法,可以给class绑定方法: def set_score(self, score = 100): self.score = score Student.set_score = set_score st1 = Student() st1.set_score(100) print(st1.score) #使用__slots__ #但是,如果我们想要限制实例的属性怎么办?比如,只允许对Student实例添加name和age属性。 #Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性 class student(object): __solts__ = ('name', 'age') # 用tuple定义允许绑定属性名称 #来来来,咱们试试 br = student() br.name = 'name' br.age = 19 print('%s %d' % (br.name, br.age)) br.id = 100011 print(br.id) #如何纠错? #方法一 #使用raise抛出异常 #当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。 #一旦执行了raise语句,raise后面的语句将不能执行。 class Stu(object): def get_score(self): return self._score def set_score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value print('YES') #方法二(@property) #@property负责把方法变属性 class stu(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be a integer') if value < 0 or value > 100 : raise ValueError('score must between 0 ~ 100') self._score = value #这样,就把方法转换成了属性 #可以这样用 s = stu() s.score = 60 #这里把score方法转换成了score属性 print(s.score) #这里的s.score相当于get_score #多重继承 class Animal(object): def speak(self): print('i am a animal') class Runnable: def run(self): print('Running...') class Flyable: def fly(self): print('Flying...') class Mammal(Animal): def speak(self): print('i am a mammal') class Bird(Animal, Flyable): def speak(self): print('i am a bird') class Bat(Mammal, Flyable): def speak(self): print('i am a bat') class Dog(Mammal, Runnable): def speak(self): print('i am a dog') class parrot(Bird, Flyable): def speak(self): print('i am a parrot') pa = parrot() pa.speak() pa.fly()
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法