廖雪峰Python教程 学习笔记11 面向对象高级编程

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)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值