python - 尝试检索类属性时出错。
问题描述
我对 Python 比较陌生,并试图通过重写并尝试在 jupyter 上运行来理解我遇到的一个函数。该函数的目的是分析调用类,检索与其关联的属性,并创建将成为稍后将针对数据库运行的查询的一部分的字符串。我创建了非常简单的类并为其添加了一些属性/属性,但是我收到一个错误,我不知道如何解决它:
class Person(object):
def __init__(self):
pass
class Employee(Person):
__required_properties__ = ['first_name', 'last_name']
def __init__(self):
super().__init__()
def inherited_labels(cls):
return ['employee']
def build_merge_query(cls, merge_params, update_existing=False, lazy=False, relationship=None):
query_params = dict(merge_params=merge_params)
print (query_params)
n_merge = "n:{} {{{}}}".format(
":".join(cls.inherited_labels()),
", ".join("{0}: params.create.{0}".format(getattr(cls, p).db_property or p)
for p in cls.__required_properties__))
return n_merge
merge_params = ('first_name', 'last_name')
myEmployee = Employee()
build_merge_query(myEmployee, merge_params)
当我运行这个时,我得到一个“属性错误:'Employee'对象没有属性'first_name'
<ipython-input-78-2973503b3f7a> in <genexpr>(.0)
21 ":".join(cls.inherited_labels()),
22 ", ".join("{0}: params.create.{0}".format(getattr(cls, p).db_property or p)
---> 23 for p in cls.__required_properties__))
24 return n_merge
25 AttributeError: 'Employee' object has no attribute 'first_name'
解决方案
我不确定你想做什么,但这是我的建议。当您初始化类时,在您的init类中,您可以向类添加属性。这是 Person 类的示例。
class Person(first_name, last_name):
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
通过这样做,您的 Person 类具有属性 first_name 和 last_name。您可以通过调用 myPerson.first_name、myPerson.last_name 轻松访问它们。
我想这就是你想要的?希望这有帮助。
推荐阅读
- python - 定期更新带有标签的 ProgressBar
- sql-server - 执行 tsqlt 测试时 tsqlt 中的回滚错误
- python - 带有管道python的子进程
- swift - 在 Swift 应用程序中控制动态文本
- ansible - Ansible 使用 {{ item }} 和 csvfile 查找
- sql - 删除大量记录导致数据库锁定
- java - 当缓存已满时,在将新实体添加到缓存之前,休眠会从缓存中逐出哪个现有实体?
- java - 如何配置 RabbitMQ 以平等地为多个消费者服务多个队列
- r - 使用 mutate (ifelse()) 创建新变量,但由于 NA 而得到错误答案
- powerbi - 如何在 Power BI 中按组计算单独的平均值?