请帮我理解Python中的Class

时间:2009-10-28 00:25:55

标签: python

我是新手,发现很难掌握python中Class的语法。我有C / C ++,java和目标C的背景。我在python中注意到的一个非常大的区别是你没有在类中明确声明“数据成员”而你只是随机添加它们?这会引起很大的混乱。

假设我有一个班级

class MyClass:

    def __int__(self, a, b):

        self.a = a

        self.b = b

然后当我发起对象时。

myobject = MyClass(10,10)

并且在一段时间之后由于某种原因我才知道我需要在这个类中使用另一个参数但是我不想使用构造函数启动它,因为它将由另一个函数根据某些特定条件启动,所以整个混乱的代码只会指出变量实际上会诞生。是不是在我调试或检查代码时出于某种其他原因检查代码会不会引起混淆?

3 个答案:

答案 0 :(得分:5)

简而言之,

你是对的。 Python允许您随时随意添加(并删除!)成员。构造函数没有什么特别之处,它允许它执行其他函数无法执行的任何操作。

如果你想确保你的类的所有实例始终具有相同的成员,那么无论如何都要在构造函数中使用像None这样的标记值来为它们分配所有实例。有一个有意义的值,并避免在构造函数外添加新成员。

取决于你如何操纵你的对象,如果你想以静态的方式做到这一点那么没关系,或者如果你想利用在任意时间添加和删除成员的能力,那也没关系。 Python本身不会强加(m)任何规则。

答案 1 :(得分: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

答案 2 :(得分: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__中的所有属性。您不必这样做,但您可能会选择多种原因 也许它可以提高您的编辑能够理解您的代码以突出显示或完成 也许这只是你喜欢的风格。