类变量:可在类的所有实例之间共享的变量
实例类对象:类的实例是调用类对象来创建的。如:par = Parent(),par就是类Parent的一个实例类对象。
实例变量(成员变量):同一个类对象可以创建多个实例类对象,类定义中有self标志的变量就是实例变量
一个例子,看下面的代码有个小问题
class MyObject(object):
x = 1
def __init__(self):
objectNum = 99
def changeNum(self,anotherNum):
self.objectNum = anotherNum
showNum(self):
print("self.num = ",self.objectNum)
obj = MyObject()
obj.showNum()
Traceback (most recent call last):
File class.pyin <module>
obj.showNum()
File in showNum
",self.objectNum)
AttributeError: 'MyObject' object has no attribute objectNum'
报错了,提示实例化对象MyObject并没有objectNum这个普通成员变量,为什么呢?
问题就在于,在Python中,类的成员变量必须使用self.propertName进行声明,这样才能完成创建,因为self的含义就是代表实例对象;
在这个类中,objectNum和self.objectNum就是两个完全不同的东西:
定义在__init__函数中的变量objectNum在这里是一个局部变量,不是类变量
obj = MyObject()
obj.changeNum(10)
obj.showNum()
>>> self.num = 10
能看到成功返回结果,
由于在changeNum()方法中,有self.objectNum = anotherNum的赋值,而__init__中,没有创建类普通成员变量self.objectNum, 而是创建了一个临时变量objectNum,所以在这里,虽然changeNum()没有被自动调用(因为不是__init__()函数),但是其实充当了创建类成员变量和初始化的作用, 但是python并不会在创建新的实例化对象的时候自动调用它。
所以通过实验得到3个结论:
ExampleClass:
createObjectProperty(self,value):
self.newObjectProperty = value
2.如果想要找到真正意义上的成员变量,那么只需要在__init__(self)中声明self.objectProperty即可
(self):
self.objectNum = 99
obj = MyObject()
# obj.changeNum(10)
obj.showNum()
>>>self.num = 99