请帮助我理解Python的课程
我是新手,发现很难掌握python中类的语法。我有C/C++、java和objective C的背景。我在python中注意到的一个非常大的区别是,您没有在类中显式声明“数据成员”,而只是随机添加它们?这导致了相当大的混乱 假设我有课请帮助我理解Python的课程,python,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) 过了一段时间,
class MyClass:
def __int__(self, a, b):
self.a = a
self.b = b
然后当我启动这个对象时
myobject = MyClass(10,10)
过了一段时间,出于某种原因,我知道我需要这个类中的另一个参数,但我不想用构造函数来初始化它,因为它将由另一个函数根据特定的条件来初始化,所以在整个混乱的代码中,这将是变量实际生成的唯一点。如果我在调试或检查代码时出于其他原因检查代码,这不是很混乱吗?你应该在文本中使用一些: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
你应该在课文中使用一些: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
简而言之,是 你说得对。Python允许您随时随意从对象中添加(和删除!)成员。构造函数没有什么特别之处,它允许它做其他函数做不到的事情 如果您希望确保类的所有实例始终具有相同的成员,那么请务必在构造函数中分配它们,对于尚未具有有意义的值的实例,请使用哨兵值,如
None
,并避免在构造函数外添加新成员
这取决于你如何操作你的对象,如果你想以一种静态的方式这样做,那么这很好,或者如果你想利用在任意时间添加和删除成员的能力,那也很好。Python本身没有强加(m)任何规则。简而言之,是的 你说得对。Python允许您随时随意从对象中添加(和删除!)成员。构造函数没有什么特别之处,它允许它做其他函数做不到的事情 如果您希望确保类的所有实例始终具有相同的成员,那么请务必在构造函数中分配它们,对于尚未具有有意义的值的实例,请使用哨兵值,如
None
,并避免在构造函数外添加新成员
这取决于你如何操作你的对象,如果你想以一种静态的方式这样做,那么这很好,或者如果你想利用在任意时间添加和删除成员的能力,那也很好。Python本身没有强加(m)任何规则
有些人喜欢在\uuuu init\uuuu
中列出所有属性。您不必这样做,但您可以选择这样做的原因有很多。也许它可以提高编辑器理解代码以突出显示或完成的能力。
也许这只是你喜欢的一种风格 有些人喜欢在
\uuuu init\uuuu
中列出所有属性。您不必这样做,但您可以选择这样做的原因有很多。也许它可以提高编辑器理解代码以突出显示或完成的能力。
也许这只是你喜欢的一种风格。你在那里用了很多词,我不确定你是否知道它的意思。什么?@NSD可能是我说的,我对python非常陌生,可能不知道python的行话。我认为这更多的是语法结构问题,而不是大问题words@All对不起,可能是因为英语不是我的第一语言。检查一下内省的力量你在那里用了很多词,我不确定你是否知道它的意思。什么?@NSD可能是我说的,我对python非常陌生,可能不知道python的行话。我认为这更多的是语法结构问题,而不是大问题words@All很抱歉可能是因为英语不是我的第一语言。检查一下内省的力量,这看起来是个不错的解决办法,但是如果有人因为某种原因忘记将这个新领域指定为“无”呢,你不认为它太简单会导致很多问题吗?如果你不在
\uuuu init\uuuuu
中编写c=None
,你只能创建带有3个参数的对象。这看起来是一个很好的解决方案,但是如果有人出于某种原因忘记将这个新字段指定为None怎么办,你不认为它太简单会导致很多问题吗?如果你不在\uuuu init\uuuuu
中编写c=None
,你只能创建带有3个参数的对象。但是你不认为这种“太多”的自由会在大项目中造成很多问题吗?@itsaoutcode:是的,是的。这就是为什么Python允许您在任意时间不添加任意成员,如果您选择不添加的话。你可以制定自己的规则并选择是否遵守。你应该提到hasattr
和sisters@itsaboutcode,大项目通常会有一个样式指南,其中会包括这样的偏好,但是你不认为这种“太多”的自由会在大项目中造成很多问题吗?@ItsautCode:是的,是的,它会。这就是为什么Python允许您在任意时间不添加任意成员,如果您选择不添加的话。你可以制定自己的规则并选择是否遵守。你应该提到hasattr
和sisters@itsaboutcode,大型项目通常会有一个样式指南,其中包括这样的首选项