廖雪峰python学习笔记9:面向对象高级

# -*- 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值