我正在寻找一个类似于数据结构的结构,我可以从其中创建多个实例,并且有一些类型提示,而不是不可变的。
所以我有这样的东西:
class ConnectionConfig(NamedTuple):
name: str
url: str
port: int
user: str = ""
pwd: str = ""
client: Any = None但我希望它是可变的。我可以这样做:
class ConnectionConfig():
def __init__(self, name: str, url: str, port: int, user: str = "", pwd: str = "", client: Any = None):
self.name = name
self.url = url
self.port = port
self.user = user
self.pwd = pwd
self.client = client但是伙计..。这很难看:/在python中有什么内置的替代方案吗?(使用Python 3.6.3)
发布于 2017-10-27 00:27:52
实际上,您的实现是(唯一的)内置方式:
class ConnectionConfig():
def __init__(self, name: str, url: str, port: int, user: str = "",
pwd: str = "", client: Any = None):
pass阅读佩普0484,我还没有找到适合你需求的其他选择。继续使用PEP链,我想PEP 20 Python的禅宗引用的这段话解释了这一点:
应该有1,最好只有一种--很明显的方法。
发布于 2017-10-21 17:42:37
class ConnectionConfig():
name: str
url: str
port: int
user: str = ""
pwd: str = ""
client: Any = None
def __init__(self, **kv):
self.__dict__.update(kv)然后,可以在构造函数中指定所有内容。
c=ConnectionConfig(port=22)
print (c.port) # will print 22发布于 2021-08-01 11:11:01
在记录类库的基础上有一个紧凑的解决方案:
> pip3 install recordclass
from recordclass import dataobject
class ConnectionConfig(dataobject):
name: str
url: str
port: int
user: str = ""
pwd: str = ""
client: Any = None
>>> con = ConnectionConfig('name','url',8080,'user','secret',tcp_client)
>>> sys.getsizeof(con)
108 # PyHEAD (16) + 6*sizeof(*void) bytes如果希望更快地创建实例,则有一个选项:
class ConnectionConfig(dataobject, fast_new=True):
name: str
url: str
port: int
user: str = ""
pwd: str = ""
client: Any = None(注意:这个版本可能不太适合IDE编辑器的自动完成)
另一种选择:
>>> from recordclass import make_dataclass
>>> ConnectionConfig = make_dataclass(
"ConnectionConfig",
[('name',str), ('url',str), ('port',str),
('use',str), ('pwd',str), ('client',Any)],
defaults=(None,),
fast_new=True)https://stackoverflow.com/questions/46865909
复制相似问题