请帮助我理解Python中的类

1 投票
3 回答
601 浏览
提问于 2025-04-15 15:26

我刚开始学编程,发现理解Python中类的语法特别困难。我之前学过C/C++、Java和Objective-C。现在我注意到Python和这些语言有一个很大的不同,就是在类里面你不需要明确声明“数据成员”,而是可以随便添加它们。这让我感到很困惑。

假设我有一个类:

class MyClass:

    def __int__(self, a, b):

        self.a = a

        self.b = b

然后当我创建这个类的对象时:

myobject = MyClass(10,10)

过了一段时间,我突然发现我需要在这个类里添加一个新的参数,但我不想通过构造函数来初始化它,因为这个参数会根据某些特定条件由另一个函数来初始化。在一堆代码中,这个变量的“诞生”就只有一个地方,这样在调试或者检查代码时,可能会让人感到困惑,对吧?

3 个回答

0
class MyClass:
    def __int__(self, a, b):
        self.a = a
        self.b = b
        self.c = None  #This line is optional

    def set_c(self, c):
        self.c = c

有些人喜欢在__init__这个地方列出所有的属性。你并不是非得这样做,但有很多理由你可能会选择这么做。
也许这样可以让你的编辑器更好地理解你的代码,从而提供更好的高亮显示或自动补全功能。
也可能这只是你个人喜欢的风格。

5

简单来说,是的

你说得对。Python 允许你随时随地给对象添加(或删除)成员。构造函数并没有什么特别之处,它能做的事情,其他函数也能做到。

如果你想确保你的类的所有实例始终拥有相同的成员,那你可以在构造函数里把它们都定义好,没什么值的成员可以用 None 作为占位符,并且尽量避免在构造函数外添加新成员。

怎么处理你的对象完全取决于你。如果你想以一种固定的方式来操作,那也没问题;如果你想随时添加或删除成员,那也可以。Python 本身并没有太多限制。

2

你真的应该在你的文本中使用一些. :p

你是想说:

class MyClass:
    def __int__(self, a, b, c=None):
        self.a = a
        self.b = b
        self.c = c

one = MyClass(1,2)
one.c # None
two = MyClass(1,2,3)
two.c # 3

撰写回答