在 class 实例中创建新变量是什么意思?

what's the meaning of creating new variables at a class instance?

我是 python 的 OOP 编程新手,我想知道为什么 python 让我们在对象实例上创建新属性。创建不遵循 class 设计的新属性有什么意义?

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

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

new_shark.pi = 3.14

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

之后
new_shark.pi = 3.14

class 对象将具有:

self.name
self.age
self.pi

三个属性

Python 和其他 OOP 语言允许 classes 继承自 baseclasses 甚至覆盖 baseclass 方法。想象一下以下情况!您有一个游戏中所有角色的基础 class。基地 class 处理诸如位置、角色名称、物品栏、衣服之类的事情,并负责更新和渲染等......你有一个敌人子 class 根据某种算法处理移动,和一个播放器 sub-class,它根据用户输入处理移动。也许敌人不需要物品栏但玩家需要。这有意义吗?

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

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

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