【问题标题】:what's the meaning of creating new variables at a class instance?在类实例中创建新变量是什么意思?
【发布时间】:2020-01-09 19:50:58
【问题描述】:

我是 python 中的 OOP 编程的新手,我想知道为什么 python 允许我们在对象实例上创建新属性。创建一个不符合类设计的新属性有什么意义?

class Shark:
    def __init__(self, name, age):
        self.name = name
        self.age = age

new_shark = Shark("Sammy", 5)
print(new_shark.age)
new_shark.pi = 3.14
print(new_shark.pi)

我预计 python 会产生错误,但它会打印 3.14

*每个答案都涵盖不同的范围。非常感谢

【问题讨论】:

  • 创建一个不符合类设计的新属性有什么意义 Python假设你知道你在做什么,它让你做它。
  • OOP 主要只是一种抽象问题以使其更易于理解的方法。 Python 允许您添加这样的属性,以便更容易将对象模型保持在适当的位置,不仅在理论上而且在实践中。

标签: python class oop instance-variables class-variables


【解决方案1】:

这里是一个类似问题的链接,里面有很多有用的答案:Why is adding attributes to an already instantiated object allowed?

现在我的答案。 Python 是一种动态语言,这意味着可以在运行时更改事物以执行。但重要的是要认识到,问题的答案更多的是风格和观点问题。

用其中所有需要的变量来实例化你的类给你带来了封装的好处和知道每次实例化类时你都可以访问该变量的安全性。另一方面,在实例化之后添加变量可能会在特定用例中为您带来不同的好处。

【讨论】:

    【解决方案2】:

    Python 和其他 OOP 语言允许类从基类继承,甚至可以覆盖基类方法。想象以下!你有一个游戏中所有角色的基类。基类处理诸如位置、角色名称、库存、服装之类的事情,并负责更新和渲染等……你有一个敌人子类来处理基于某种算法的运动,还有一个玩家子类来处理基于用户输入的移动。也许敌人不需要库存,但玩家需要。这有意义吗?

    【讨论】:

      【解决方案3】:
      new_shark.pi = 3.14
      

      表示为类对象添加一个新属性(如果不存在)。

      之后

      new_shark.pi = 3.14
      

      类对象将具有:

      self.name
      self.age
      self.pi
      

      三个属性

      【讨论】:

        猜你喜欢
        • 2017-10-21
        • 1970-01-01
        • 2016-09-15
        • 1970-01-01
        • 2012-04-21
        • 2021-06-21
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        相关资源
        最近更新 更多