在类实例上创建新变量是什么意思?

时间:2019-09-07 03:19:19

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

我是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

*每个答案涵盖了不同的领域。非常感谢您

3 个答案:

答案 0 :(得分:1)

new_shark.pi = 3.14

意味着向类对象添加一个新属性(如果不存在)。

之后

new_shark.pi = 3.14

该类对象将具有:

self.name
self.age
self.pi

三个属性

答案 1 :(得分:1)

Python和其他OOP语言允许类从基类继承,甚至覆盖基类方法。想象以下内容!您拥有游戏中所有角色的基类。基类处理诸如位置,角色名称,库存,服装等内容,并负责更新和渲染等。您有一个根据某种算法处理运动的敌方子类,以及处理某种算法的玩家子类。基于用户输入的运动。也许敌人不需要存货,但玩家需要。这有道理吗?

答案 2 :(得分:1)

这里是指向类似问题的链接,其中包含许多有用的答案:Why is adding attributes to an already instantiated object allowed?

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

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