python - 使用装饰器或元类为所有类设置公共实例变量
问题描述
我有一个使用参数 id、name、email、ticket 初始化 A 类的场景。然后在类 A 的方法中初始化类 B,并且需要传递相同的参数,依此类推。可以在类声明期间使用装饰器或元类设置这些公共属性吗?
class A:
def __init__(self, id, name, email, ticket):
self.id = id
self.name=name
self.email=email
self.ticket=ticket
def __somefunc(self):
# do something
b = B(self.id, self.name, self.email, self.ticket)
b.__dosomething()
同样......类C等等......我发现将所有这些重复的参数发送到所有后续类有点不合适。
解决方案
如果您只是想减少键入的字符数(出现在代码中),请制作这些值的字典并用它实例化其他类。
Class A:
def __init__(self, id, name, email, ticket):
self.id = id
self.name=name
self.email=email
self.ticket=ticket
self.params = {'id':id, 'name':name, 'email':email, 'ticket':ticket}
def __somefunc(self):
# do something
b = B(**self.params)
b.__dosomething()
Can these common attributes be set using a decorator or metaclass during class declaration.
? 是的,可能。
推荐阅读
- python - MacOS Catalina 10.15.5 Flask-Mysqldb pip install 报错
- makefile - 带有`ifeq`的Makefile测试特定文件
- azure - az storage account:“blob-service-properties”不在“az storage account”命令组中
- xcode - 简化 Xcode 中的 SwiftUI 预览
- javascript - 我们可以使用 iframe (HTML/JS) / Umap 的元素吗
- sql - 如何自动增加 id 并插入 2 行
- r - 如何将相关性显示为闪亮的数字输出?
- libraries - 如何将 jregex 库导入芭蕾舞女演员应用程序
- html - 无法将 CSS 添加到 HTML 代码以从 Mailkit 发送电子邮件
- r - bioconductor 和 R,在尝试检索基因序列时使用 getBM() 函数时出错