Python:如何基于__init __()的参数设置类变量?

时间:2013-06-01 10:04:18

标签: python class

我有一堂课C. 我想用一个参数实例化这个类。我们称之为论证d。 所以我想做myC = C(d = 5)。 C还应该有另一个名为e的变量。在实例化类时,应将e的值设置为d。

所以我写了这个:

>>> class C:
...     def __init__(self,d):
...         self.d = d
...     e = d
... 

但是这给了我以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in C
NameError: name 'd' is not defined

好的,所以我会尝试稍微不同的东西:

>>> class C:
...     def __init__(self,d):
...         self.d = d
...     e = self.d
... 

但是这给了我这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in C
NameError: name 'self' is not defined

那我该怎么做呢?这应该很简单。

2 个答案:

答案 0 :(得分:8)

您还需要e方法的__init__部分。在调用该函数之前,未定义d

class C:
    def __init__(self,d):
        self.d = d
        self.e = d

如果您愿意,可以将它们放在同一行:

class C:
    def __init__(self,d):
        self.d = self.e = d

如果您需要e作为类属性而不是实例属性,请直接引用该类:

class C:
    def __init__(self,d):
        self.d = d
        C.e = d

或使用type(self)

class C:
    def __init__(self,d):
        self.d = d
        type(self).e = d

后者意味着如果你继承C,那么将在相应的子类上设置class属性。

答案 1 :(得分:0)

class C:
    def __init__(self,d):
        self.d = self.e = d