Python中类和实例关系

类是实例工厂。类的属性提供了行为(数据以及函数),所有从类产生的实例都继承该类的属性

类对象提供默认行为

  • 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']

 # 在类中新增的属性,类的实例对象也会具有此属性,因为实例继承类的属性
    原文作者:Tab609
    原文地址: https://blog.csdn.net/luckytanggu/article/details/53471729
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞