首页 > 解决方案 > 尝试检索类属性时出错。

问题描述

我对 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'

标签: python

解决方案


我不确定你想做什么,但这是我的建议。当您初始化类时,在您的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 轻松访问它们。

我想这就是你想要的?希望这有帮助。


推荐阅读