Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请帮助我理解Python的课程_Python - Fatal编程技术网

请帮助我理解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) 过了一段时间,

我是新手,发现很难掌握python中类的语法。我有C/C++、java和objective C的背景。我在python中注意到的一个非常大的区别是,您没有在类中显式声明“数据成员”,而只是随机添加它们?这导致了相当大的混乱

假设我有课

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,大型项目通常会有一个样式指南,其中包括这样的首选项