python - 没有 __init__ 的类中的类变量赋值
问题描述
考虑以下:
from module1 import foo_ext()
class A(object):
x = foo_ext()
@classMethod
def foo1():
. . .
@classMethod
def foo2():
. . .
@classMethod
def foo3():
. . .
是不是每次我们调用A.foo1()
或A.foo2()
x
类变量都没有通过调用再次分配foo_ext()
,只有在第一次调用“静态类”时才调用A
它的一些类方法:foo1
,foo2
等等?
解决方案
是否每次我们调用 A.foo1() 或 A.foo2() x 类变量都不会通过调用 foo_ext() 再次分配
是的,当然为什么?
仅在第一次调用“静态类”A 及其一些类方法:foo1、foo2 等?
甚至不。该语句 - 与块顶层的所有语句一样class
- 被评估为class
语句执行的一部分,即 - 假设最常见的情况是class
模块顶层的语句(=> 不在函数内) - 首次为给定进程导入模块时。
这个:
class Foo(object):
x = somefunc()
def bar(self):
print("foo")
@staticmethod
def baaz():
print("quux")
实际上只是语法糖:
x = somefunc()
def bar(self):
print("foo")
def baaz():
print("quux")
attribs = {
"x" : x,
"bar": bar,
"baaz": staticmethod(baaz)
}
del x
del bar
del baaz
Foo = type("Foo", (object,), attribs)
那么为什么您希望x = somefunc()
每次实例化Foo
或调用时都会执行该语句bar
or baaz
?
推荐阅读
- azure-cosmosdb - 如何使用 c# 更新 cosmos db 中文档中的特定子值?
- textpad - 警告:线路
拆分为 64 KB - java - 使用 Java HtmlEditorKit 保存汉字
- apache-spark - 缓存嵌套列时,Spark 是否优化存储
- reporting-services - 评估 SSRS 报告标题中的参数
- r - 如何计算字符的持续时间
- apache-spark - 如何将 Map 发送到 Kafka 主题,以便 ProducerRecord 键与对应的 Map 键相同
- json - 从 txt 文件中提取 JSON 值并用逗号分隔写入
- excel - vba 的 Excel Lastrow 自动填充问题
- c# - C# Winform 重试