【问题标题】:Any way to initialize attributes/properties during class creation in python?在python中创建类期间初始化属性/属性的任何方法?
【发布时间】:2012-07-29 11:18:11
【问题描述】:

在 Python 中是否与这一行代码等效?

// C# just shows how class looks like
class MyClass {
    public int A {get; set;}
    public int B {get; set;}
}

// This is that one-line code in C#. Any pythonic way to do something like this?
// var x = MyClass() { A=1, B=2 } - "var" syntax sugar, at compile time it's == MyClass
MyClass x = MyClass() { A=1, B=2 }

编辑:也许我的问题不是那么精确。我的主要目标是不将参数传递给构造函数。

如何初始化许多类成员(它们的任意组合),而不将它们传递给构造函数,并且不使用所有默认值的构造函数。

编辑:谢谢你的答案,很抱歉让你困惑的问题。我只是想知道主题中问题的答案-什么是初始化类的属性子集而不在构造函数中明确编写它们的最佳方法(pythonic 方法)。

【问题讨论】:

  • 不将它们作为参数传递给构造函数?
  • 你问的是类创建还是实例创建?
  • 您的问题不清楚。具体并告诉我们您想在哪里应用这种东西..以便我们可以给您更合适的答案
  • for k, v in {'A': 1, 'B': 2}: setattr(MyClass, k, v)
  • 曾经可以说一个具有 100 个属性的对象/类/结构,其任意子集可能具有值,这比无用更糟糕。如果您将其中一个对象传递给我,我可以合理地期望用它做什么?乔在下面给了你你所要求的,但我不确定你是否真的想要你所要求的。

标签: python class properties


【解决方案1】:

我不确定您要实现什么,但您可能希望将通用参数传递给类构造函数,例如:

class MyClass:
    def __init__(self, **kwargs):
        for key in kwargs:
            setattr(self, key, kwargs[key])

x = MyClass(a='test', b='test2')
# x.a == 'test'
# x.b == 'test2'
y = MyClass(c=123, d='something else')
# y.c = 123
# y.d = 'something else'

【讨论】:

  • 这不是他要问的。
  • @Surya:在您在其他评论中发布的链接中,我很确定这是实现我想要的最佳方式。我不想将 A、B、C、D... 添加到构造函数的参数列表中,但我忘记了 kwargs 和 setattr 函数。所以这是最简单的方法。我认为...
  • @gnibbler:self.__dict__.update(kwargs) 不会更明确吗?
  • 使用self.__dict__.update(kwargs) 将绕过任何通过setter 实现为属性的属性; setattr 没有。
【解决方案2】:

实际上,我不了解 C#,但查看您的代码,我认为这是您正在查看的代码。

def MyClass (object):
    def __init__ (A, B):
        self.A = A
        self.B = B

x = MyClass(A=1, B=2)

编辑:

如果您要查找 100 个参数,请使用 **kwargs 之类的内容。

【讨论】:

  • 对不起,但不是真的:) 我只是提出了一个简单的例子,有 2 个属性,如果有 100 个属性,我想初始化它们的任意组合怎么办?我知道构造函数是如何工作的:) 这不是我想要的。也许我的问题不是很清楚。已编辑。
  • @Simon 看看这个stackoverflow.com/questions/1098549/… 在这种情况下它应该对你有帮助
  • @Simon:完全不清楚你想要什么。如果您有 100 个属性,为什么不将它们存储在 dict 中,而不是让它们成为类属性?
  • 我已经回答过了。这只是一个例子。我还再次编辑了问题。我希望现在更清楚了。
【解决方案3】:

在 Python 中创建一个类只需这样做:

class Name:
    def __init__(self, arg1): # When an instance of a class is made this will be executed.
        self.var1 = 1
        self.var2 = 2
        self.arg1 = arg1

person1 = Name("arg1") # Create instance of the class

我个人不知道是否有一种方法可以在一行中以 Python 方式执行此操作,因为您还需要创建 init() 方法。

【讨论】:

    猜你喜欢
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多