python面向对象-高级编程 笔记

本文介绍了Python编程中的几个高级技巧,包括使用__slots__限制类属性、实现可迭代类以支持for循环、使用@property装饰器简化属性管理、创建枚举类以及实现多重继承。通过实际示例展示了如何应用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础过了一遍下来,感觉前面的又有点忘了。所以还是得以实战为主,基础知识当做手册来查,这样可能会好点,程序写多了,自然很多东西就记住了。
贴一些简单例子。留个笔记

1

class Student(object):
    __slots__=('name','age')

S=Student()
S.name='liu'
S.age=22
S.score=11
#这里会报错,因为 __slots__限定了这类的属性只有name和age
#所以__slots__的作用很明显了
#看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。
#__slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数。这里涉及到的就是定制类

2 定制类,按我的理解。
比如,我们要用for….in 来循环一个类,但是首先,这个类必须是可迭代的。那怎么办呢?我们就要用到上面说到的有特殊用途的函数,这里要可迭代,那我们就要用到iter方法,改方法返回一个可迭代的对象。然后还要用到next方法拿到循环的下一个值

我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:

class Fib(object):
def init(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b

def __iter__(self):
    return self # 实例本身就是迭代对象,故返回自己

def __next__(self):
    self.a, self.b = self.b, self.a + self.b # 计算下一个值
    if self.a > 100000: # 退出循环的条件
        raise StopIteration()
    return self.a # 返回下一个值

所以,按个人理解就是,你想对这个类做什么操作,首先,这个类要有这样的功能,如果没有,那么我们可以通过python的特殊函数,来定制出来这个类

3 @property

class Screen(object):
    @property
    #设置width属性可读
    def width(self):
        return self._width
        #self._width可操作对象的访问限制来理解,加上下划线 _ ,限制了改对象无法读写,需另设置方法来读取和更改。而这里用@property装饰器来处理,功能一样,而且更简化。
    @width.setter
    #设置widrh属性可写
    def width(self,value):
        self._width=value

    @property
    def height(self):
        return self._height
    @width.setter
    def height(self,value):
        self._height=value

    @property
    def resolution(self):
        return self._height*self._height
s = Screen()
s.width = 1024
s.height = 768
print('resolution =', s.resolution)
if s.resolution == 786432:
    print('test sucess')
else:
    print('test fff')

4 枚举类

from enum import Enum,unique
@unique
class Student(Enum):
    male=0
    fmale=1

print Student.fmale.value

遇到一些常用的,固定的,比如月份。可以设置枚举类,然后需要用的时候直接调用该类的对象来使用即可。而且还可以直接获取实例属性的信息和对应的值

5 多重继承
多重继承,打个比喻,有两个类,会飞的动物类,会跑的动物类。然后有一个动物类既会飞,又会跑,那么它可以直接继承这两个类。这样就有了飞和跑的方法了

PS:这里面很多知识都是参照 廖雪峰的python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值