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

Saq*_*Ali 1 python class

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

所以我写了这个:

>>> class C:
...     def __init__(self,d):
...         self.d = d
...     e = d
... 
Run Code Online (Sandbox Code Playgroud)

但是这给了我以下错误:

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

好的,所以我会尝试一些略有不同的东西:

>>> class C:
...     def __init__(self,d):
...         self.d = d
...     e = self.d
... 
Run Code Online (Sandbox Code Playgroud)

但这给了我这个错误:

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

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

Mar*_*ers 8

你也需要制作方法的e一部分__init__.d在调用该函数之前未定义:

class C:
    def __init__(self,d):
        self.d = d
        self.e = d
Run Code Online (Sandbox Code Playgroud)

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

class C:
    def __init__(self,d):
        self.d = self.e = d
Run Code Online (Sandbox Code Playgroud)

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

class C:
    def __init__(self,d):
        self.d = d
        C.e = d
Run Code Online (Sandbox Code Playgroud)

或使用type(self):

class C:
    def __init__(self,d):
        self.d = d
        type(self).e = d
Run Code Online (Sandbox Code Playgroud)

后者意味着如果你是子类C,则将在相应的子类上设置class属性.