python入门系列八(类)

1.引言

python是一种面向对象编程语言,类是面向对象编程中组织代码的基本单元。如果你有其它面向对象编程语言的基础,比如java,那么你一定,也应该知道面向对象编程的三大核心:封装,继承,多态。

  • 封装:通过封装,隐藏对象的内部实现细节,仅暴露公共接口给外部使用。实现了信息和操作细节的隐藏。
  • 继承:通过继承实现代码的可复用性和扩展
  • 多态:通过多态实现了代码运行时动态特性,即根据对象的实际类型而非申明类型进行代码调用

而这一切,都要以类作为基础。下面我们来看关于python中类的方方面面!

2.类

2.1.再聊编程范式

之所以说是再聊编程范式,原因在于在之前"面向对象编程 "专栏关于编程范式,有过详尽的分享:面向过程编程,面向对象编程,函数式编程 三大编程范式。感兴趣的朋友可以看看这篇文章:juejin.cn/post/742110...。在这里,我就不重复造轮子了。

2.2.类的基本定义和使用

python中通过class关键字进行类定义的修饰。像这样:

python 复制代码
#定义类
class Person:
    def hello(self):
        print("hello python class!")

# 实例化类,并使用
obj = Person()
obj.hello()

2.3.类的继承

继承可以实现代码的复用性。python中继承使用像这样:

python 复制代码
# 定义类
class Person:
    def hello(self):
        print("hello python class!")

# 定义子类Student,继承Person
class Student(Person):
    def hello(self):
        # 调用父类hello方法,通过super()
        super().hello()
        print("here output Student class")

# 实例化Student并使用
obj = Student()
obj.hello()

2.4.类的装饰器

类的装饰器,在上一篇关于函数的分享文章中,有简单的提及,你可以回过头去看看。今天我要给你分享的是:@classmethod,@staticmethod,@property三个装饰器内容。

2.4.1.@classmethod

修饰定义类相关的方法,而非实例。相当于工厂方法。有两个特点:

  • 第一个参数:cls,表示类本身,可用于访问类属性或创建类实例
  • 子类继承父类时,自动指向子类,保持多态特性

示例:

python 复制代码
# 装饰器@classmethod示例
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def from_birth_year(cls, name, birth_year):
        current_year = 2025
        age = current_year - birth_year
        # 创建类的实例
        return cls(name, age)  

# 调用类方法
p = Person.from_birth_year("小王", 2000)  
print(f"小王的年龄:{p.age}") 

2.4.2.@staticmethod

定义与类相关但无需访问类或实例状态的工具方法 。等价于定义一个普通函数,原本和类不相干,但是位置放到类里面,方便引用和维护管理。借鸡生蛋!其实就是在java编程语音中,定义的一个个工具类有没有

python 复制代码
# 装饰器@staticmethod示例
class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

    @staticmethod
    def is_even(num):
        return num % 2 == 0

# 像不像java中各种工具类
print(MathUtils.add(3, 5))   
print(MathUtils.is_even(8)) 

2.4.3.@property

将方法转换为:属性。使得访问方法与访问属性方式一致,不需要括号。实际项目中,通常用于封装属性的验证和计算逻辑。换句话描述,等价于通用bean对象的getter/setter方法,这么说你应该就明白了。看一个示例:

python 复制代码
# @property装饰器示例
class Person:
    def __init__(self, name):
        # 内部使用私有变量存储值
        self._name = name  

    @property
    def name(self):
        print("get name...")
        return self._name

    @name.setter
    def name(self, value):
        print("set name...")
        self._name = value

p = Person("小王")
# 调用 @property 的 getter.你看到了:调用方法不需要括号
print(p.name)  
 # 调用 @name.setter
p.name = "老王"  

2.5.类的特殊方法

2.5.1.init

python中init构造方法,在创建类的实例的时候自动调用,用于完成对象属性的初始化。但是要注意,它不负责创建对象,仅仅负责初始化。真正创建对象的方法是new方法。示例:

python 复制代码
class Person:
    def __init__(self, name, age):
        # 初始化实例属性
        self.name = name  
        self.age = age

# 创建实例时自动调用 __init__
p = Person("小王", 30)
print(p.name)  

2.5.2.call

python的神奇方法:call。它让对象实例可以像方法一样调用,在python中,当你这样使用某个对象实例,比如:obj(),实则调用的即是类中的call方法。示例:

python 复制代码
class Adder:
    def __init__(self, base):
        # 初始化实例属性
        self.base = base  

    def __call__(self, x):
        # 调用实例时执行此方法
        return self.base + x

# 创建实例
adder = Adder(10)  
# 等价于调用 adder.__call__(5)
print(adder(5))   

另外call方法,还可用于实现类装饰器。还记得上篇文章的这个案例吗?

python 复制代码
import time
# 定义Timer类,通过__call__实现装饰器功能
class Timer:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        import time
        start = time.time()
        result = self.func(*args, **kwargs)
        end = time.time()
        print(f"耗时: {end - start:.2f}秒")
        return result

@Timer
def slow_function():
    time.sleep(1)

slow_function() 
相关推荐
白熊1885 分钟前
【图像大模型】ExVideo-SVD-128f:面向长视频生成的时空扩散模型深度解析
人工智能·音视频·通用智能体·web search
科技小E8 分钟前
安防综合管理系统EasyCVR视频融合平台安防知识:门禁系统与视频监控系统如何联动?
网络·人工智能·音视频
Sonetto19999 分钟前
【Python】【面试凉经】Fastapi为什么Fast
python·面试·flask·fastapi·凉经
金融RPA机器人丨实在智能15 分钟前
智能体应用如何重塑未来生活?全面解析技术场景与实在Agent突破
人工智能·生活·agent·智能体
zwjapple23 分钟前
python创建flask项目
开发语言·python·flask
AI糊涂是福25 分钟前
人工智能、机器学习与深度学习:概念解析与内在联系
人工智能·深度学习·机器学习
嘉图明36 分钟前
《AI革命重塑未来五年:医疗诊断精准度翻倍、自动驾驶事故锐减90%,全球科技版图加速变革》
人工智能·科技·自动驾驶
SAP工博科技44 分钟前
泰国SAP ERP实施如何应对挑战?工博科技赋能中企出海EEC战略
人工智能·科技
__Benco1 小时前
OpenHarmony外设驱动使用 (四),Face_auth
人工智能·驱动开发·计算机视觉·harmonyos
Oliverro1 小时前
WebRTC技术EasyRTC嵌入式音视频通信SDK助力智能电视搭建沉浸式实时音视频交互
人工智能·音视频