在python中创建类的过程中,有没有初始化属性的方法?
在Python中有与这一行代码等效的代码吗在python中创建类的过程中,有没有初始化属性的方法?,python,class,properties,Python,Class,Properties,在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
// 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方式)是什么 实际上,我不知道C语言,但看看你的代码,我想这就是你正在看的代码
def MyClass (object):
def __init__ (A, B):
self.A = A
self.B = B
x = MyClass(A=1, B=2)
编辑:
如果您要查找100个参数,请使用类似于
**kwargs
的内容实际上,我不知道C;#但是查看您的代码,我认为这就是您正在查看的参数
def MyClass (object):
def __init__ (A, B):
self.A = A
self.B = B
x = MyClass(A=1, B=2)
编辑:
如果您要查找100个参数,请使用类似于
**kwargs
的方法来使用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()方法。要在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
我个人不知道是否有办法在一行pythonical中实现这一点,因为您还需要创建init()方法。我不确定您试图实现什么,但您可能希望将泛型参数传递给类构造函数,如:
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'
我不确定您试图实现什么,但您可能希望将泛型参数传递给类构造函数,如:
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'
没有将它们作为参数传递给构造函数?您是在询问类创建还是实例创建?您的问题不清楚。具体一点,告诉我们你想在哪里应用这种东西。。因此,我们可以为{'A':1,'B':2}中的k,v给出更合适的答案:
:setattr(MyClass,k,v)
曾经可以说,一个具有100个属性的对象/类/结构,其中任意子集可能有值比无用还要糟糕。如果你把其中一件东西递给我,我能合理地期望它做什么?Qiau给了你下面所要求的,但我不确定你是否真的想要你所要求的。没有将它们作为参数传递给构造函数?你是在问类创建还是实例创建?你的问题不清楚。具体一点,告诉我们你想在哪里应用这种东西。。因此,我们可以为{'A':1,'B':2}中的k,v给出更合适的答案::setattr(MyClass,k,v)
曾经可以说,一个具有100个属性的对象/类/结构,其中任意子集可能有值比无用还要糟糕。如果你把其中一件东西递给我,我能合理地期望它做什么?Qiau给出了您在下面要求的内容,但我不确定您是否真的想要您要求的内容。对不起,但不是真的:)我刚刚给出了一个简单的示例,其中有两个属性,如果有100个,我想初始化它们的任意组合,该怎么办?我知道构造函数是如何工作的:)这不是我想要的。也许我的问题不太清楚。已编辑。@Simon看一下这个,它应该对您有所帮助case@Simon当前位置根本不清楚你想要什么。如果您有100个属性,为什么不将它们存储在dict
中,而不是使它们成为类属性呢?我已经回答了这个问题。这只是一个例子。我也再次编辑了这个问题。我希望现在更清楚了。对不起,但不是真的:)我刚刚给出了一个带有两个属性的简单示例,如果有100个属性,我想初始化它们的任意组合怎么办?我知道构造函数是如何工作的:)这不是我想要的。也许我的问题不太清楚。已编辑。@Simon看一下这个,它应该对您有所帮助case@Simon当前位置根本不清楚你想要什么。如果您有100个属性,为什么不将它们存储在dict
中,而不是使它们成为类属性呢?我已经回答了这个问题。这只是一个例子。我也再次编辑了这个问题。我希望现在更清楚了。这不是他要问的。@Surya:在你在其他评论中发布的链接中,我很确定这是我实现我想要的最好的方式。我不想加上A,B,C,D。。。到我的构造函数的参数列表,但我忘记了kwargs和setattr函数。所以这是最简单的方法。我认为…@gnibler:wouldself.\u dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.update(kwargs)
会更明确吗?使用self.\uusetattr
没有。这不是他问的问题。@Surya:在你在其他评论中发布的链接中,我很确定这是我实现我想要的最好的方式。我不想加上A,B,C,D。。。到我的构造函数的参数列表,但我忘记了kwargs和setattr函数。所以这是最简单的方法。我认为…@gnibler:wouldself.\u dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.update(kwargs)
会更明确吗?使用self.\uu<代码>设置属性不存在。