【问题标题】:Python: How to define a variable in an __init__ function with a class method?Python:如何使用类方法在 __init__ 函数中定义变量?
【发布时间】:2014-03-20 18:08:09
【问题描述】:
class TextToNumbers():
    def __init__(self, number):
        self.text = str(number)
        self.chunks = parse_text_to_chunks(self.text)

    def parse_text_to_chunks(text_to_parse):
        #stuff

这是我正在构建的一个类的示例。我希望它在初始化时用类方法定义一些变量。 (至少我认为这就是我想要的)我认为,如果我谈论我的最终目标,那就是我有一组复杂的信息,需要在初始化时直接获得关于类的信息。如何在初始化时调用类方法,定义类变量?

【问题讨论】:

  • 你为什么要这样做?如果你在__init__中初始化一个类变量,这样做有什么意义呢?
  • 您在寻找self.parse_text_to_chunks(self.text)吗?
  • 不确定。我不想以后告诉它弄清楚。会有更好的方法来实现这一点吗?例如,按照上面的示例,我不想稍后再说object.parse_text_to_chunks,我只想让它自己自动完成并将该值分配给一个变量。
  • 正如@BrenBarn 刚刚指出的那样,我显然可以做到,我只是遇到了一些愚蠢的错误语法问题。

标签: python class methods initialization


【解决方案1】:

如果您正在寻找一种在初始化期间调用实例方法的方法,您可以使用self 像这样调用它

class TextToNumbers():
    def __init__(self, number):
        self.text = str(number)
        self.chunks = self.parse_text_to_chunks(self.text)
        print self.chunks

    def parse_text_to_chunks(self, text_to_parse):
    # 1st parameter passed is the current INSTANCE on which this method is called
        self.var1 = text_to_parse[1:]
        return self.var1

TextToNumbers(123)

我相信这是您真正需要的。但是如果你想要一个类方法

class TextToNumbers():
    def __init__(self, number):
        self.text = str(number)
        self.chunks = TextToNumbers.parse_text_to_chunks(self.text)
        print self.chunks

    @classmethod
    def parse_text_to_chunks(cls, text_to_parse):
    # 1st parameter passed is the current CLASS on which this method is called
        cls.var1 = text_to_parse[1:]
        return cls.var1

TextToNumbers(123)

但是在__init__ 中创建一个类方法来初始化一个类变量是没有意义的,因为一个类变量由该类的所有实例共享,从__init__ 调用将在每次创建对象时覆盖。

【讨论】:

  • 所以你是说因为 self.chunks 总是相同的(因为它与 self.text 相关)所以我不希望它在 init 中?那么它会属于哪里呢?
  • __init__ 变量对于类的每个实例都是唯一的,在每个类中都不相同,所以我不想要类中的一个方法,它允许类的每个实例找出它自己的独特变量?
  • @Borromakot 你对__init__ 变量是正确的,我想说的是,类变量与实例变量不同。在__init__self. 中创建的变量称为实例变量。
  • 好吧,我想你的例子对我来说已经解决了,然后我的经验不足将对话与不正确的词汇混淆了。非常感谢!
  • @Borromakot 没问题 :) 享受 Python :)
猜你喜欢
  • 2018-01-03
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-26
相关资源
最近更新 更多