【问题标题】:Difference Between Property, Attribute and Methods Object Orientation属性,属性和方法之间的区别面向对象
【发布时间】:2021-10-23 13:32:56
【问题描述】:

我想更好地理解以下之间的区别:

  1. 属性
  2. 方法
  3. 财产

我创建了一个名为 Patient 的类,并且我已经标记了哪些方法和属性:

此代码中的哪个属性是属性,如果该属性是完全不同的东西并且我没有将它包含在我的代码中,那么使用我的示例如何包含一个属性?

还有什么是类的属性?

【问题讨论】:

  • 属性是专门用 @property 装饰器制作的。基本上它使该属性不可写(只读)并且您不需要调用它来访问它,虽然它被定义为一种方法,但它也必须return 一些东西。例如,在您的情况下,您可以执行p1.patient_state = None,它将覆盖该方法并将其替换为None 值的属性,如果该方法是使用@property 装饰器创建的,则您无法做到这一点
  • @Matiiss:没有@property 也可以创建属性,使用装饰器比创建自己的描述符更容易。说“特制”意味着只有一种方法可以做到。
  • 我删除了您帖子的一部分,因为这是一个单独的问题,帖子应该只关注一个问题。对于删除的部分,已经有this Q&A
  • 要记住的一点是,虽然“属性”在 Python 中具有特定的含义,但在 OOP 中更一般地说,它与属性或成员的含义相同
  • 这能回答你的问题吗? How does the @property decorator work in Python?

标签: python class


【解决方案1】:

您的代码中没有属性。您可以阅读此SO Answer 以了解有关属性的更多信息。

简而言之,它们通常由 @property 装饰器标记,因此您可以定义 getter 和 setter。

默认情况下,每个实例属性都有一个 getter 和 setter。获取它只是返回它的值并设置它设置值。属性允许您修改这些 getter 和 setter 的行为,并在返回/设置之前更改值。

创建类时的括号通常用于inheritance。空白括号与不包括任何内容相同。

因此,class Person() 在功能上与class Person 相同。

这意味着该类只是从object 派生而来(您可以阅读更多关于here 的信息),但您可以接受它,因为它不是从任何父类派生的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2016-08-20
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多