@classmethod用于构造函数重载

编程入门 行业动态 更新时间:2024-10-22 23:09:36
本文介绍了@classmethod用于构造函数重载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我通常使用 isinstance 进行构造函数重载,但人们也建议使用 @classmethod 进行重载。但是据我所知, @classmethod 共享变量。

I usually use isinstance for constructor overloading, but people also suggests @classmethod for the same. But to my knowledge @classmethod shares the variable.

下面是一个简单的类

class abc: def __init__(self, a=0): self.a = a @classmethod def from_const(cls, b=30): cls.b = b return cls(10) def printme(self): print(self.a,self.b)

现在,让我们制作三个对象

Now, lets make three objects

a1 = abc(a=100) a2 = abc.from_const(b=31) a3 = abc.from_const(b=41) a4 = abc().from_const(b=51) a5 = abc().from_const(b=61) a1.printme() a2.printme() a3.printme() a4.printme() a5.printme()

输出:

100 61 10 61 10 61 10 61 10 61

现在我有两个问题,

  • 是否有可能使@classmethod不共享类变量es吗?
  • 如何正确使用@classmethod进行构造函数重载?
推荐答案

也许您想先初始化实例,然后在类中为其分配 b 。

Maybe you want to init the instance first, then assign b inside your class to it.

这是一个主意:

class abc: def __init__(self, a=0): self.a = a self.b = None @classmethod def from_const(cls, b=30): instance = cls(10) instance.b = b return instance def printme(self): print(self.a,self.b) a1 = abc(a=100) a2 = abc.from_const(b=31) a3 = abc.from_const(b=41) a4 = abc.from_const(b=51) a5 = abc.from_const(b=61)

输出:

(100, None) (10, 31) (10, 41) (10, 51) (10, 61)

更多推荐

@classmethod用于构造函数重载

本文发布于:2023-10-27 23:04:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1534800.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   classmethod

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!