python对象的理解

python中对象的概念是什么?

python中万物皆对象,所有的一切都是对象,包括一个整形数据。浮点型或者布尔型数据都是对象,与c++中对象的概念一致,都是包含属性和方法。占用空间也不一样,c++下整型是基本数据类型,在一个64位bit系统上,占用空间大小为8个字节,而在python中则不然,一般在64位系统上一个整型占用的空间大约为28个字节。由此可以看出,python相对于c++/c来说,对于资源的占用肯定是多的,这也是为啥一般在嵌入式环境中不使用python进行开发的原因。因为吃资源。

另外需要说明的在python中我们可能一般不太关注一个对象占用多少空间。但是如果确实想要知晓一个对象占用的空间的大小,一种方式是使用sys.getsizeof(obj)方法

python对象3要素

  1. 身份(identity),查看一个对象的身份或者是地址信息,可以使用id()函数来实现
  2. 类型(type),查看对象类型可以使用type()函数进行查看
  3. 值,查看一个对象的值一般可以通过print()函数来查看

在python中万物皆对象,哪怕是一个整数,也是一个对象,一般一个int对象占用的空间大小为28个字节。如下所示:

>>> b=4
>>> sys.getsizeof(b)
28
>>> dir(b)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

 我们可以通过python的内置函数dir()来查看一个对象中有哪些方法其中__xxxxx__是魔术方法,一般情况下不能进行显式的调用都是在达到某些触发条件时就会自动调用这些方法。对于int、float等基本类型对象,我们一般无需自定义这些方法;但是当自定义类时,根据具体情况实现这些魔术方法。

a=2
b=3
print(a==b)

上面的例子中就会触发__eq__的调用。同样的当a=2语句也会触发__init__方法的调用。

魔术方法

所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种的特殊方法,普通方法需要调用,而魔术方法不需要显示调用就可以执行。

魔术方法在类或对象的某些事件出发后会自动执行,让类具有神奇的“魔力”。如果希望根据自己的程序定制自己特殊功能的类,那么就需要对这些方法进行重写。

object类

python中所有类的最终基类是object类,object类中包含很多方法,通过dir()查看如下:

>>> dir(object)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> 

查看一个python对象的方法和属性

通过dir()可以查看python对象中所有的属性和方法,通过这个函数可以查看一些类的方法和属性,然后进行调用。示例如下所示:

>>> dir(b)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

这些方法的作用可以参考链接: Python魔术方法-CSDN博客

 查看对象身份(identity)

通过id()函数可以查看对象的内存地址标识。

>>> c=5
>>> id(c)
9789120

查看对象类型

通过type()方法可以实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值