python:init方法和类内声明之间的区别?

时间:2015-07-12 07:16:41

标签: python

这两种方法有什么区别吗? 选项1:

class a(object):
    def __init__(self):
        self.x = 123
        self.y = 345

选项2:

class a(object):
        x = 123
        y = 345

这两个选项有什么区别吗? 提前谢谢。

2 个答案:

答案 0 :(得分:5)

第一种方法的一个例子(实例级变量):

instance0 = a()
instance1 = b()

instance0.x = 5
print instance1.x # prints 123

print a.x  # undefined variable - x is not defined

第二种方法的一个例子(类级变量):

instance0 = a()
instance1 = b()

instance0.x = 5
print instance1.x # prints 5

print a.x  # prints 5

第二种方法,变量在类级别分配,意味着更改此值会传播到该类的所有实例。您也可以在没有类实例的情况下访问变量。

答案 1 :(得分:4)

是的,在第一种情况下,类a的每个对象都有自己的x和y副本,在第二种情况下,类a的所有对象都共享它们。

顺便说一句,如果您从Python开始,请使用大写字母作为类名的第一个字符,例如我的课。人们习惯了这一点,一旦他们变大,它将帮助你理解你自己的程序。