请帮助我理解Python中的类
我刚开始学编程,发现理解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