每日Python之——一切皆为对象

一、何为对象?

 
 

1.首先我们得知道什么是对象?那对象是如何定义的呢?

  其实,对于不同的编程语言,对于“对象”的定义也不太一样,比如有的语言中规定,对象必须包含属性和方法,或者所有的对象都可以子类化等等。所以,我们知道了对象这个概念并不是一尘不变的。

 

2.那么针对Python而言。对象是什么呢?

  从一个稍微底层的方面来说,对象的本质也就是:一块内存区域。从内容的种类划分来看,这些内存里存着的内容有:标识符、类型、值(Python对象这三个特性基本都有)以及相关的一些操作等。

  • 标识符(id):用来唯一标识该对象,可以认为是该对象的内存地址。
  • 类型(type):类型决定了对象可以保存什么类型的值,有哪些属性和方法,可以进行哪些操作。
  • 值(value):保存的具体的数据。
     

3.另外,大部分对象也包含“属性”和“方法”。

  比如:类,这种对象就有类属性,当然也能想到还有实例属性。使用时,用句点(.)属性运算符来访问属性。

  • 属性:抽象来说一个属性就是用于描述这个对象的一个特性。比如,马的身高就是它的一个属性;具体来说就是一个变量,至于引用什么就看需要了。这里提到了“引用”,简单来说就是,通过指针建立了变量和对象的一种连接。比如 a = 99,a是变量,99是个对象。

转载:关于引用的详细理解可以参考——Python中的变量与对象,作者:My Captain

  • 方法:就是用实例化的对象去调用的函数就称为方法,但这只是在 python3 中才有的区分,python2 中全部称为方法。(也有一种说法,就是说方法也是一种属性)我感觉应该也没啥毛病,这只是和思维的抽象程度有关吧,这也正好进一步说明了Python的一切皆对象!毕竟他俩都是用属性运算符(.)去访问的。
     
     

二、一切皆对象

  我感觉说到这里大家对对象还是有个稍微具象的画面了吧。那么如何理Python中“一切皆对象呢”?
  相信从上一段我们讨论时大家就有察觉,在一个类对象中,包含有属性、方法等,那些代表属性的变量可以引用各种对象,并且就连类里面的方法其实也是一个对象,方法里面的变量就是它的属性。是不是有一种嵌套的感觉?事实上有这种感觉就对了,因为这些概念之间确实就是有着很奇妙的关系。下面运行一串揭示这些关系的代码:

a = 3
b = "3"
c = []
d = ()
e = {}


class f:
    def __init__(self, name,  gender):
        self.__name = name
        self.__gender = gender

    def get_name(self):
        return self.__name


print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
print(type(f))
print(type(f.get_name))
print("\n")

print(type(int))
print(type(str))
print(type(list))
print(type(tuple))
print(type(dict))
print(type(type))
print(type(type(f.get_name)))
print(type(object))
print("\n")

print(int.__bases__)
print(str.__bases__)
print(list.__bases__)
print(tuple.__bases__)
print(dict.__bases__)
print(type.__bases__)
print(object.__bases__)

运行结果如下:

E:\Anaconda3\python.exe F:/untitled2/type.py
<class 'int'>
<class 'str'>
<class 'list'>
<class 'tuple'>
<class 'dict'>
<class 'type'>
<class 'function'>


<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>


(<class 'object'>,)
(<class 'object'>,)
(<class 'object'>,)
(<class 'object'>,)
(<class 'object'>,)
(<class 'object'>,)
()

  可见,int、str、list、tuple、function以及object都是type类的,而int、str、list、tuple、type的基类也都是object。可能有点乱,下面再用一张图来屡屡:
在这里插入图片描述
注:虚线为继承,实线为实例,即object是type的实例,type继承了object。
  从图中可知,原来object(对象)就是最上层的基类。相信到此,你应该对“一切皆为对象”有了自己的理解了吧。


小章鱼mowmow来结尾咯~(动图来自ins:dowdow_v)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值