当前位置: 首页 > 知识库问答 >
问题:

python中的属性getter和setter不显示所有属性[重复]

公良飞尘
2023-03-14

我声明了以下类,并声明email作为一个属性,该属性使用属性初始化decorators.however__dict__没有列出email作为对象的属性,而是列出_email。这是如何工作的?

class abc:
    def __init__(self,first,second):
        self.first=first
        self.second=second
        self.email=first+","+second
    @property
    def email(self):
        return self._email
    @email.setter
    def email(self,e):
        self._email=e
        
a = abc("hello","world")
print(a.first)
print(a.second)
print(a.email)
print(a.__dict__)

共有1个答案

帅煌
2023-03-14

这就是设置属性的原因,也是它显示_email的原因:

@email.setter
def email(self,e):
    self._email=e
        

编写时调用此setter函数:

self.email=first+","+second

这就像写作:

email(first+","+second)

结果是:

self._email=first+","+second

最后,当我们提到自我时。电子邮件中,我们基本上是在称getter为:

@property
def email(self):
    return self._email

但是,当我们引用self._email时,我们访问的是支持属性,而不是调用getter。这就是为什么区分_email和电子邮件是有意义的,也是为什么它在判决中指定了_email。

 类似资料:
  • 有两种类型的对象属性。 第一种是 数据属性。我们已经知道如何使用它们了。到目前为止,我们使用过的所有属性都是数据属性。 第二种类型的属性是新东西。它是 访问器属性(accessor properties)。它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用 get

  • 如何在Kotlin中创建一个具有私有getter(或只是没有)但具有公共setter的属性? 不能使用错误: 在我的例子中,原因是Java Interop:我希望我的Java代码能够调用,但不能调用。

  • 问题内容: 长话短说:我需要使用PHP风格的getter,但要使用JavaScript。 我的JavaScript仅在Firefox中运行,因此我可以使用Mozilla特定的JS。 我能找到的制作JS吸气剂的唯一方法是指定其名称,但我想为所有可能的名称定义一个吸气剂。我不确定这是否可行,但我非常想知道。 问题答案: 可以做到!我很高兴这个存在!这里给出一个答案:是否有与python的__getat

  • 我不明白为什么我必须对类中的私有属性使用getter或setter。

  • 问题内容: 如何在JavaScript中模拟PHP风格的__get()和__set()魔术获取器/设置器?许多人说这目前是不可能的。我几乎可以肯定,这是有可能的,因为像nowjs(http://nowjs.com)这样的项目会做这样的事情。 我知道您可以利用get和set,但是当您不确定属性名称是什么时,这些将无法使用。例如, 如果您希望在创建新属性时执行事件处理程序,该 怎么办? 我想做的例子:

  • 问题内容: 我熟悉Java,但是刚开始学习JavaFX,尤其是学习JavaFX属性。我了解Oracle的以下示例所示的基本设计模式: 我不明白的是什么时候/为什么要使用getter和setter方法,而不是直接使用Property? 我在想的是,您可能希望在getter和/或setter中有一些自定义代码,这些代码可能对数据做一些前后操作/验证,但是如果您创建自定义getter和/或setter,