在Python中仅获取对象的已定义属性

22 浏览
0 Comments

在Python中仅获取对象的已定义属性

我想要获取我在Python中自己定义的对象的所有属性,以创建一个字符串表示。我希望避免手动编写并填充所有变量,这样未来添加/删除属性就不会出错。\n例如,在下面的代码中,我正在寻找一种方法来检索我自己定义的所有属性:email、password和birthday。\n在Python中有没有一种方法可以做到这一点?\n

class Account:
    def __init__(self, email, password, birthday):
        self.email = email
        self.password = password
        self.birthday = birthday
    def __str__(self):
        delim = ","
        # 我希望避免将其全部写出
        return f"{self.email}{delim}{self.password}{delim}{self.birthday}"
print(Account("manfred@gmail.com", "hunter2", 3))

0
0 Comments

有时候在Python中,我们只想获取对象中已定义的属性。然而,Python默认情况下,如果我们使用.__dict__方法来获取对象的属性,它会返回对象的所有属性,无论这些属性是否被显式定义。

为了解决这个问题,我们可以使用.__dict__.values()方法来获取对象中已定义的属性。这个方法会返回一个包含所有已定义属性的列表。

下面是一个示例代码,演示了如何获取一个对象中已定义的属性:

list(Account("manfred.com", "hunter2", 3).__dict__.values())

这段代码创建了一个Account对象,并使用.__dict__.values()方法获取了该对象中已定义的属性。然后,我们将返回的属性列表转换成了一个列表,并打印输出。

通过使用这种方法,我们可以只获取对象中已定义的属性,而不包括任何继承或动态添加的属性。这对于需要仅获取对象的显式定义属性的情况非常有用。

在这个示例中,我们使用了Account对象来演示,但实际上,这个方法适用于任何Python对象。

总之,通过使用.__dict__.values()方法,我们可以只获取对象中已定义的属性,从而解决了这个问题。

0
0 Comments

在Python中,有时候我们只想获取一个对象的已定义属性。下面的代码段展示了一个解决这个问题的方法:

A = Account("manfred.com", "hunter2", 3)
{i:getattr(A, i) for i in dir(A) if not i.startswith("_")}

这段代码使用了列表推导式来获取对象A的已定义属性。在这之前,我们需要先定义一个Account类的实例A。然后,通过遍历A的属性列表dir(A),我们可以通过getattr(A, i)来获取A的每个属性的值。最后,我们使用字典推导式将属性名和属性值组成键值对。

这种方法返回了一个字典,其中键是属性名,值是对应属性的值。在上述示例中,返回的字典是{'birthday': 3, 'email': 'manfred.com', 'password': 'hunter2'},它包含了对象A的所有已定义属性及其对应的值。

需要注意的是,上述代码中使用了dir(A)来获取对象A的属性列表。然而,dir函数并不是专门用来获取对象已定义属性的,而是用来获取对象的所有属性(包括已定义和未定义的属性)。因此,更好的替代方法是使用vars(A)或A.__dict__来获取对象A的已定义属性。

总结起来,通过列表推导式和getattr函数,我们可以获取一个对象的已定义属性。使用vars(A)或A.__dict__可以更方便地实现这个目标,而不是使用dir函数。

0