Python中类和实例关系

python 专栏收录该内容
24 篇文章 0 订阅

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

类对象提供默认行为

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

 # 在类中新增的属性,类的实例对象也会具有此属性,因为实例继承类的属性
  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值