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

合肥专业手机网站哪家好搜索推广平台

合肥专业手机网站哪家好,搜索推广平台,国际新闻最新消息今天军事,西宁市建设网站公司在 Python 中,类方法 (classmethod) 和静态方法 (staticmethod) 是类作用域下的两种特殊方法。它们使用装饰器定义,并且与实例方法 (def func(self)) 的行为有所不同。1. 三种方法的对比概览方法类型是否访问实例 (self)是否访问类 (cls)典型用途实例方法…

在 Python 中,类方法 (@classmethod) 和静态方法 (@staticmethod) 是类作用域下的两种特殊方法。它们使用装饰器定义,并且与实例方法 (def func(self)) 的行为有所不同。


1. 三种方法的对比概览

方法类型是否访问实例 (self)是否访问类 (cls)典型用途
实例方法✅ 是❌ 否访问对象属性
类方法 @classmethod❌ 否✅ 是创建类的替代构造器,访问类变量等
静态方法 @staticmethod❌ 否❌ 否工具函数,与类逻辑相关但不依赖类或实例

2. 实例方法(默认方法)

class MyClass:def instance_method(self):print(f"This is an instance method. self = {self}")obj = MyClass()
obj.instance_method()  #  输出 self 为该实例

3. 类方法 @classmethod

class MyClass:class_var = "Hello, Class!"@classmethoddef class_method(cls):print(f"This is a class method. cls = {cls}")print(f"Access class_var = {cls.class_var}")MyClass.class_method()  #  通过类调用
obj = MyClass()
obj.class_method()      #  通过实例也可以调用

🔹 特点:

  • 第一个参数是 cls,代表类本身

  • 常用于:

    • 构造不同初始化方式
    • 修改/访问类变量
    • 工厂模式 (from_* 等)

示例:类方法作为工厂方法

class Book:def __init__(self, title, author):self.title = titleself.author = author@classmethoddef from_string(cls, book_str):title, author = book_str.split(",")return cls(title.strip(), author.strip())book = Book.from_string("1984, George Orwell")
print(book.title)  # ➜ 1984

4. 静态方法 @staticmethod

class MyMath:@staticmethoddef add(x, y):return x + yprint(MyMath.add(3, 5))  # ➜ 8

特点:

  • 不接收 selfcls 参数

  • 和普通函数类似,但归属在类中,逻辑上与类相关

  • 常用于:

    • 与类操作相关的工具方法
    • 不需要访问类或实例内部状态

示例:静态方法作为工具函数

class Temperature:def __init__(self, celsius):self.celsius = celsius@staticmethoddef to_fahrenheit(c):return c * 9 / 5 + 32def show(self):print(f"{self.celsius}°C = {self.to_fahrenheit(self.celsius)}°F")temp = Temperature(25)
temp.show()  # ➜ 25°C = 77.0°F

总结:何时用哪种方法?

场景推荐方法
需要访问或修改实例属性实例方法
需要访问或修改类变量、类构造类方法 @classmethod
工具函数:与类相关但不访问类或实例成员静态方法 @staticmethod

@classmethod@staticmethod 应用场景实战

利用 Python 中的 @classmethod@staticmethod 可以优雅地实现设计模式,如单例模式工厂模式。下面我将分别讲解这两种模式的原理、适用场景,并结合代码示例说明如何使用类方法或静态方法实现。


1、工厂模式(Factory Pattern)

定义:工厂模式是一种创建对象的设计模式,它允许类在创建对象时不暴露实例化逻辑,而是通过类方法返回不同的类实例。

使用类方法实现工厂模式

class Animal:def __init__(self, name):self.name = name@classmethoddef create_dog(cls):return cls("Dog")@classmethoddef create_cat(cls):return cls("Cat")# 使用工厂方法创建对象
dog = Animal.create_dog()
cat = Animal.create_cat()print(dog.name)  # ➜ Dog
print(cat.name)  # ➜ Cat

应用场景

  • 多种初始化方式(如从字符串、文件、数据库等)
  • 根据条件返回不同子类对象

更复杂示例:带注册机制的工厂

class ShapeFactory:_creators = {}@classmethoddef register(cls, name, creator):cls._creators[name] = creator@classmethoddef create(cls, name, *args, **kwargs):if name not in cls._creators:raise ValueError(f"Unknown shape: {name}")return cls._creators[name](*args, **kwargs)# 各种 Shape 类
class Circle:def __init__(self, radius):self.radius = radiusclass Square:def __init__(self, length):self.length = length# 注册
ShapeFactory.register("circle", Circle)
ShapeFactory.register("square", Square)# 创建对象
c = ShapeFactory.create("circle", 5)
s = ShapeFactory.create("square", 3)
print(c.radius)  # ➜ 5
print(s.length)  # ➜ 3

2、单例模式(Singleton Pattern)

定义:单例模式保证类在程序中只有一个实例。

使用类方法实现单例

class Singleton:_instance = None@classmethoddef get_instance(cls):if cls._instance is None:cls._instance = cls()return cls._instance# 测试
a = Singleton.get_instance()
b = Singleton.get_instance()
print(a is b)  # ➜ True

也可以结合 __new__ 实现单例

class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls)return cls._instance# 所有实例是同一个
a = Singleton()
b = Singleton()
print(a is b)  # ➜ True

3、静态方法在设计模式中的作用

工具类模式(Utility Pattern)

静态方法常用于实现工具类(即所有方法都与对象状态无关,仅执行逻辑计算)。

class MathUtils:@staticmethoddef add(x, y):return x + y@staticmethoddef multiply(x, y):return x * yprint(MathUtils.add(3, 4))       # ➜ 7
print(MathUtils.multiply(3, 4))  # ➜ 12

4、小结

设计模式推荐使用原因
工厂模式@classmethod需要访问类构造器、支持多种创建方式
单例模式@classmethod / __new__控制实例生成的唯一性
工具类@staticmethod无需访问类/实例,仅提供辅助功能

http://www.dtcms.com/wzjs/376547.html

相关文章:

  • 政府网站管理统统优化关键词排名优化公司
  • 做网站设计师好吗合肥百度推广排名优化
  • wordpress 信息查询插件宁波seo快速优化课程
  • 洛阳市网站建设bilibili推广网站
  • 滨州做网站建设价格苏州网站建设公司排名
  • 网页广告怎么去除uc浏览器关键词排名优化
  • 斗鱼类的直播网站开发如何去推广自己的产品
  • 中原免费网站建设长尾关键词挖掘熊猫
  • 东莞凤岗网站建设制作app排名优化公司
  • 武汉seo论坛深圳抖音seo
  • 定制企业网站建设哪家好济南网站建设哪家好
  • 网站推广有必要吗网站关键词排名优化工具
  • 效果好企业营销型网站建设高清网站推广免费下载
  • 武汉做网站便宜怎么做网络营销平台
  • 美女网站源码带采集关于手机的软文营销
  • 贵阳营销型网站建设黑河seo
  • 东莞做网站公司排名seo搜索铺文章
  • 如何设计一个网页面板搜索引擎优化的内容
  • 西安保洁公司网站建设seo优化招商
  • 公司网站开发费账务处理百度权重排名
  • 扬州做公司网站千博企业网站管理系统
  • 汕头网站设计热门关键词
  • 永久3e38cos免费seo诊断优化专家
  • 企业大型网站建设要多少钱惠城网站设计
  • 公司网站后台更新今天的新闻大事10条
  • 线下推广的好处蔡甸seo排名公司
  • 全国公路建设市场信用信息管理系统网站搜狗官方网站
  • 怎么给餐饮店做网站陕西企业网站建设
  • 广州b2b网站建设公司五个成功品牌推广案例
  • 做网站成为首富的外国人微博营销软件