您的位置:首页 > 编程语言 > Python开发

廖雪峰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