我有一个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
那么我应该如何做我想做的事情呢?这应该很简单。
请您参考如下方法:
您还需要使 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 属性。
