【问题标题】:Is it necessary to initialize static class variables?是否需要初始化静态类变量?
【发布时间】:2017-11-10 16:51:24
【问题描述】:

几天前我开始学习python,我正在尝试不同的东西。

我写的代码如下:

class ConsumeState:
    token

我收到此代码的以下错误

NameError: name 'token' is not defined

于是我将token初始化为"abc",错误就消失了。

我的问题是,如果此时我不想定义静态变量该怎么办?在python中是否总是需要初始化静态变量?

【问题讨论】:

  • 如果你不想定义静态变量,那就不要这样做。
  • 你可以做token = None
  • token = None如果你不想给它任何值,但仍然想声明它。
  • Python 没有变量声明。您总是分配给一个变量。如果您现在不想分配给它,不要,当您这样做时,只需执行ConsumeState.token = 'whatever'

标签: python class-variables


【解决方案1】:

与 C、Java、C# 等不同,在 python 中,您不需要初始化变量,甚至不需要声明它是 String 或 int 或 float。

你可以这样声明:

u=set()
u.add("stack")
u.add("overflow")

你也可以这样做:

u=set(["stack","overflow"])

这是一个单行,但先创建一个列表,然后再从中创建一个集合。

这将创建一个包含 0-4 中所有数字的幂的列表。您无需声明 l 是一个列表,然后在其中添加内容。你也不需要声明 x 是一个 int 甚至初始化它。

l = [x for x in range(5)]

在python中你也可以这样做:

s="stack"
s=[x for x in "overflow"]

看到了吗?我只是将 s 的类型从字符串更改为列表。我还可以在同一个列表中添加不同的对象。

s.append(5)

如果我现在要打印 s,我会得到这个:

['o', 'v', 'e', 'r', 'f', 'l', 'o', 'w', 5]

5 仍然是字符串对象列表中的整数。

我也可以使用与其他对象相同的整数进行操作

print(s[-1:][0]/5)

例如打印 5/5。 s[-1:] 告诉 python 返回一个仅包含最后一个对象的列表。在该列表中,我选择 [0] ,即 5,然后将其除以 5。

如果我要执行一个 forloop,我会得到错误,我不能对字符串类型使用除法操作。

如果你要这样做:

u=set()
def pwsdw():
    some code here..
    u.add(x)

您会收到未初始化变量的错误。

你可以这样做:

u=set()
def pwsdw():
    global u
    some code
    u.add(x)

总而言之,python 是一种极其灵活的语言。玩得开心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2010-12-22
    • 2018-12-19
    • 2018-06-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多