当前位置: 首页 > article >正文

Python入门教程 —— 面向对象进阶

1.类方法和实例方法

类方法

  • 第一个形参是类对象的方法
  • 需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。
class Dog(object):
    __type = "狗"

    # 类方法,用classmethod来进行修饰
    @classmethod
    def get_type(cls):
        return cls.__type
print(Dog.get_type())

使用场景:

  • 当方法中 需要使用类对象 (如访问私有类属性等)时,定义类方法
  • 类方法一般和类属性配合使用

静态方法

  • 需要通过装饰器@staticmethod来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls)
  • 静态方法 也能够通过 实例对象 和 类对象 去访问。
class Dog(object):
    type = "狗"

    def __init__(self):
        name = None

    # 静态方法    
    @staticmethod
    def introduce():  # 静态方法不会自动传递实例对象和类对象
        print("犬科哺乳动物,属于食肉目..")

dog1 = Dog()
Dog.introduce()    # 可以用 实例对象 来调用 静态方法
dog1.introduce()    # 可以用 类对象 来调用 静态方法

使用场景:

  • 当方法中 既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象 (如类属性、类方法、创建实例等)时,定义静态方法
  • 取消不需要的参数传递,有利于 减少不必要的内存占用和性能消耗

注意点:

  • 类中定义了同名的方法时,调用方法会执行最后定义的方法
class Dog:

    def demo_method(self):
        print("对象方法")

    @classmethod
    def demo_method(cls):
        print("类方法")

    @staticmethod
    def demo_method():  # 被最后定义
        print("静态方法")

dog1 = Dog()
Dog.demo_method()  # 结果: 静态方法
dog1.demo_method()  # 结果: 静态方法

2.单例设计模式

__new__和__init__方法

class A(object):
    def __init__(self):
        print("这是 init 方法")

    def __new__(cls):
        print("这是 new 方法")
        return object.__new__(cls)

A()

总结

  • __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
  • __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例
  • __init__有一个参数s

http://www.kler.cn/a/468609.html

相关文章:

  • Nginx——入门介绍、安装与核心配置文件结构(一/五)
  • 【数据可视化】数据可视化看板需求梳理模板(含示例)
  • 【动态重建】时间高斯分层的长体积视频
  • nodejs实现https://localhost在window系统自签名99年+授信
  • 【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
  • VISRAG论文介绍:一种直接的视觉RAG
  • Go语言的 的反射(Reflection)基础知识
  • 基于伪分布式模式部署Hadoop集群
  • 开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?
  • 流光效果
  • docker从下载到Python项目打包到容器中运行(解决下拉超时问题)
  • 【three.js】Shader着色器
  • 如何弥补开源大语言模型解决推理任务的不足
  • 深度 SEO 优化
  • 常见的框架漏洞复现
  • HarmonyOS NEXT应用开发实战(一):边学边玩,从零开发一款影视APP
  • 如何使用SparkSql
  • GESP202406 二级【计数】题解(AC)
  • html生成注册与登录代码
  • 使用LINUX的dd命令制作自己的img镜像
  • 【CSS】第一天 基础选择器与文字控制属性
  • 实时数仓:基于数据湖的实时数仓与数据治理架构
  • 【人工智能】基于Python与OpenCV构建简单车道检测算法:自动驾驶技术的入门与实践
  • [读书日志]从零开始学习Chisel 第四篇:Scala面向对象编程——操作符即方法(敏捷硬件开发语言Chisel与数字系统设计)
  • 【开源监控工具】Uptime Kuma:几分钟设置实时监控你的网站性能
  • 计算机网络掩码、最小地址、最大地址计算、IP地址个数