# -*- 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学习笔记9:面向对象高级
最新推荐文章于 2020-05-17 21:16:34 发布