1

我有一个 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

那么我应该怎么做我想做的事?这应该很简单。

4

2 回答 2

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化,则将在适当的子类上设置类属性。

于 2013-06-01T10:05:34.557 回答
0
class C:
    def __init__(self,d):
        self.d = self.e = d
于 2013-06-01T10:05:18.460 回答