当前位置:首页>python>09 Python3 面向对象高级编程

09 Python3 面向对象高级编程

  • 2026-09-10 19:57:01
09 Python3 面向对象高级编程
基于AI的流行,所有主流的AI框架只认Python,那么学习Python这个语言就势在必行了,TensorFlow(谷歌)、Pytorch(Meta)、Hugging Face(大模型)、Scikit-learn(传统机器学习)python都是第一语言没有之一
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性
但是,如果我们想要限制实例的属性怎么办?比如,只允许对Student实例添加name和age属性。为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性:
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:
s = Student()s.score = 9999
这显然不符合逻辑,为了限制score的范围,可以通过一个set_score()方法来设置成绩,在通过一个get_score()来获取成绩,这样在set_score()方法里就可以检查参数
class Student(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
但是感觉上面的方法又略显复杂,没有直接用属性这么直接简单。

有没有既能检查参数,又可以用类似属性这样简单的方式来访问类的变量呢?对于追求完美的Python程序员来说,这是必须要做到的!

还记得装饰器(decorator)可以给函数动态加上功能吗?对于类的方法,装饰器一样起作用。Python内置的@property装饰器就是负责把一个方法变成属性调用的:

继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。

class Animal(object):    pass# 大类:class Mammal(Animal):    passclass Bird(Animal):    pass# 各种动物:class Dog(Mammal):    passclass Bat(Mammal):    passclass Parrot(Bird):    passclass Ostrich(Bird):    pass

现在,我们要给动物再加上Runnable和Flyable的功能,只需要先定义好Runnable和Flyable的类:

class Runnable(object):    def run(self):        print('Running...')class Flyable(object):    def fly(self):        print('Flying...')
对于需要Runnable功能的动物,就多继承一个Runnable,例如Dog:
class Dog(Mammal, Runnable):    pass
我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份:
JAN = 1FEB = 2MAR = 3...NOV = 11DEC = 12

好处是简单,缺点是类型是int,并且仍然是变量。

更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:

from enum import EnumMonth = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:
Python内置的try...except...finally用来处理错误十分方便。出错时,会分析错误信息并定位错误发生的代码位置才是最关键的。
今天就先讲到这里吧 感觉就是一些基础的东西  后续基于AI用到相关python代码 我们继续学习 

最新文章

随机文章