python类和对象的概念_Python基础系列讲解——类和类型的概念剖析

Python是一门面向对象的语言,在Python中一切皆为对象(object)。对象是什么?对象总体来说是对某个实体的抽象描述,对象可分为类型和非类型两种(或者类和非类两种),类型是指可被继承和实例化的对象,比如int是可被继承和实例化,而非类型是指一个实例对象,比如一个数值为100的对象,它并没有被继承的意义。所谓的类是我们从一堆对象中抽取相同的特征内容构造而成的,也就是我们所称的抽象的概念,特征内容即为类的全部属性。比如有香蕉类、苹果类、桃子类,从这些类抽取相同的特征内容就是水果这个抽象类。那么类型和类又有什么关系呢?

这里有必要说下Python经典类classic classes和新式类new-style classes的区别,classic classes的元类是types.ClassType,而new-style classes的元类是type,也就是说所有的新式类都是由type类实例化创建而来。在Python 2.x及以前的版本中我们由class代码块创建的类对象是经典类,内建类型都属于新式类。

我们先来研究下类型。比如我们创建testval这个实例对象,type()获得testval的类型是int,近一步分析可知int的类型为’type’,int的超类(父类)是’object’,同时也看到int包含了对象所具有的全部属性。

testval = 100

type(testval) ——>>

type(type(testval)) ——>>

type(testval).__bases__ ——>> (,)

dir(testval) ——>> ['__abs__', '__add__',......'real']

'object’和’type’之间的关系是什么?再近一步分析可知object是type的实例,type本身也是自己的实例,同时object自己已经是所有对象的超类,包括也是type的超类,因此object并没有超类。总体而言object和type是Python中的两个源对象,它们互相依赖对方来定义,因此所有直接或间接继承object的类属于新式类。

type(object) ——>>

object.__class__ ——>>

object.__bases__ ——>> ()

type.__class__ ——>>

type.__bases__ ——>> (,)

另外看到官方文档中公布了一则消息,在Python 2.7版本中已经集成了新式类,而经典类在Python 3.x中被移除,也就是说在Python3.x及之后的版本,类和类型已经合并为一体。

AAffA0nNPuCLAAAAAElFTkSuQmCC

在Python 2.7 版本中运行以上代码可知A的类型为老式的classobj,B显式继承了超类’object’成为了新式类,Python 3.x的运行结果与B完全相同,进一步印证在Python 3.x中所有的类都是新式类,即显示或隐式继承自object类。

class A():pass

class B(object):pass

print(type(A)) ——>>

print(type(B)) ——>>

再近一步分析可知class类型的超类也是’object’,可以说所有类都直接或间接的继承自’object’。

(type(A)).__bases__ ——>> (,)

(type(B)).__bases__ ——>> (,)

在类的基础上我们可以继承(inheritance)超类的属性,并在超类的基础上派生(derived)新的属性创建出新类,两者之间的关系为父类和子类的关系,比如蛇是一种爬行动物,其中蛇是子类,爬行动物是父类,蛇拥有爬行动物的特征,同时又拥有标志自己是一条蛇的特征。这个机制的好处是可以在不改变超类代码的基础上改变原有的功能。产生了所需的类后,我们可以通过类来创建实例,那么类和实例关系可体现在两个对象之中,其中一个对象(实例)是另一个对象(类型)的具体实现。比如我有一条宠物蛇叫Squasher,那么Squasher就是蛇的一个实例。

class C(object):

pass

class D(object):

pass

class E(C, D):

pass

我们可以使用內建的函数issubclass查看一个类是否是另一个类的子类

issubclass(E,C) ——>> True

也可以使用bases查看一个类包含哪些子类

E.__bases__ ——>> (, )

同样可以检查一个对象是否是一个类的实例

ef= E()

isinstance(ef,E) ——>> True

以及查看一个对象属于哪个类

ef.__class__ ——>>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值