如何在 Python 中实现静态属性?
How can I implement a static attribute in Python?
如何使用可共享和可访问的静态属性在 Python 中实现静态 属性 或方法对?
class StaticClass:
__static_attr: str
@classmethod
def set(cls, input__):
cls.__static_class = input__
@classmethod
def get(cls):
return cls.__static_attr
StaticClass.set("Hello!")
print(StaticClass.get())
输出:
C:\Users\pc\AppData\Local\Microsoft\WindowsApps\python3.7.exe C:/Users/pc/source/repos/main.py
Traceback (most recent call last):
File "C:/Users/pc/source/repos/main.py", line 15, in <module>
print(StaticClass.get())
File "C:/Users/pc/source/repos/main.py", line 11, in get
return cls.__static_attr
AttributeError: type object 'StaticClass' has no attribute '_StaticClass__static_attr'
Process finished with exit code 1
编辑: 上面的源代码在set()
中有错别字。如果该拼写错误得到修复,代码将完美运行。
但是,对于我的原始源代码,该属性是 List[str]
。在那种情况下,只有通过一对方括号 []
.
初始化属性时,程序才会运行
import os
from typing import List
class SearchFilesInTheDirectory:
__file_list: List[str] = []
@classmethod
def do_indexing_of_files(cls, path, file_extension):
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(file_extension):
cls.__file_list.append(os.path.join(root, file))
@classmethod
def get_files_list(cls):
return cls.__file_list
@classmethod
def printf(cls):
if cls.__file_list is not None:
for file in cls.__file_list:
print(file)
else:
print("directory is empty")
@classmethod
def write_to_file(cls, file_name):
if cls.__file_list is not None:
with open(file_name, 'w') as f:
for f_name in cls.__file_list:
f.write("%s\t%s\n" % f_name)
else:
print("directory is empty")
最好初始化 class 静态变量,而不仅仅是声明它的类型。这样您甚至可以在 set
之前调用 get
,并使其 return 成为默认值:
class StaticClass:
__static_attr = ""
@classmethod
def set(cls, input__):
cls.__static_attr = input__
@classmethod
def get(cls):
return cls.__static_attr
StaticClass.set("Hello!")
print(StaticClass.get())
此外,您的原始代码似乎有错字,因此 set
方法分配给了您声明的变量以外的变量(__static_class
而不是 __static_attr
).因此,由于静态变量未初始化,您的 get
方法失败。
如何使用可共享和可访问的静态属性在 Python 中实现静态 属性 或方法对?
class StaticClass:
__static_attr: str
@classmethod
def set(cls, input__):
cls.__static_class = input__
@classmethod
def get(cls):
return cls.__static_attr
StaticClass.set("Hello!")
print(StaticClass.get())
输出:
C:\Users\pc\AppData\Local\Microsoft\WindowsApps\python3.7.exe C:/Users/pc/source/repos/main.py
Traceback (most recent call last):
File "C:/Users/pc/source/repos/main.py", line 15, in <module>
print(StaticClass.get())
File "C:/Users/pc/source/repos/main.py", line 11, in get
return cls.__static_attr
AttributeError: type object 'StaticClass' has no attribute '_StaticClass__static_attr'
Process finished with exit code 1
编辑: 上面的源代码在set()
中有错别字。如果该拼写错误得到修复,代码将完美运行。
但是,对于我的原始源代码,该属性是 List[str]
。在那种情况下,只有通过一对方括号 []
.
import os
from typing import List
class SearchFilesInTheDirectory:
__file_list: List[str] = []
@classmethod
def do_indexing_of_files(cls, path, file_extension):
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(file_extension):
cls.__file_list.append(os.path.join(root, file))
@classmethod
def get_files_list(cls):
return cls.__file_list
@classmethod
def printf(cls):
if cls.__file_list is not None:
for file in cls.__file_list:
print(file)
else:
print("directory is empty")
@classmethod
def write_to_file(cls, file_name):
if cls.__file_list is not None:
with open(file_name, 'w') as f:
for f_name in cls.__file_list:
f.write("%s\t%s\n" % f_name)
else:
print("directory is empty")
最好初始化 class 静态变量,而不仅仅是声明它的类型。这样您甚至可以在 set
之前调用 get
,并使其 return 成为默认值:
class StaticClass:
__static_attr = ""
@classmethod
def set(cls, input__):
cls.__static_attr = input__
@classmethod
def get(cls):
return cls.__static_attr
StaticClass.set("Hello!")
print(StaticClass.get())
此外,您的原始代码似乎有错字,因此 set
方法分配给了您声明的变量以外的变量(__static_class
而不是 __static_attr
).因此,由于静态变量未初始化,您的 get
方法失败。