类
类是实例工厂。类的属性提供了行为(数据以及函数),所有从类产生的实例都继承该类的属性
类对象提供默认行为
- class语句创建类对象并将其赋值给变量名
- class语句内的赋值语句会创建类的属性
- 类属性提供对象的状态和行为
实例
代表程序领域中具有的元素。实例属性记录数据,而每个特定对象的数据都不同
实例对象是具体的元素
- 像函数那样调用类对象会创建新的实例对象
- 每个实例对象继承类的属性并获得了自己的命名空间
- 在方法内对self属性做赋值运算会产生每个实例自己的属性
类和实例的主要差异在于,类是一种产生实例的工厂。
下面看看一个例子
class FirstClass(object):
def setdata(self, value):
self.data = value
def display(self):
print self.data
>>> fc = FirstClass()
>>> fc.setdata('Hello Python')
>>> fc.display()
Hello Python
# ****************************
>>> fc.__class__.__name__ # fc实例继承的类
'FirstClass'
# ***************************
>>> fc.name = 'Flask' # 为实例新增属性name
>>> dir(fc)
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'display',
'name',
'setdata']
>>> dir(FirstClass)
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'display',
'setdata']
# name仅fc对象才有,FirstClass没有name属性
# ***************************
>>> FirstClass.age = 25 # 类新增age属性
>>> dir(FirstClass)
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'age',
'display',
'setdata']
>>> dir(fc)
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'age',
'display',
'name',
'setdata']
# 在类中新增的属性,类的实例对象也会具有此属性,因为实例继承类的属性