类复杂数据描述符或类变量的实数和虚数?

问题描述

您会知道python中的类complex。它包含:

>>> dir(complex)
Output :
['__abs__','__add__','__bool__','__class__','__delattr__','__dir__','__divmod__','__doc__','__eq__','__float__','__floordiv__','__format__','__ge__','__getattribute__','__getnewargs__','__gt__','__hash__','__init__','__init_subclass__','__int__','__le__','__lt__','__mod__','__mul__','__ne__','__neg__','__new__','__pos__','__pow__','__radd__','__rdivmod__','__reduce__','__reduce_ex__','__repr__','__rfloordiv__','__rmod__','__rmul__','__rpow__','__rsub__','__rtruediv__','__setattr__','__sizeof__','__str__','__sub__','__subclasshook__','__truediv__','conjugate','imag','real']

这里conjugate是类complex的方法。但是我的疑问是什么是真实的,而imag称为???

在help()中:

>>>help(complex)
Output:
class complex(object)
 |  complex(real=0,imag=0)
...
...
...
 ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  imag
 |      the imaginary part of a complex number
 |  
 |  real
 |      the real part of a complex number

在help()中,real和imag作为数据描述符给出。

在type()中:

>>> a=1j
>>> type(a.real)
<class 'float'>
>>> type(a.imag)
<class 'float'>

当我们访问类中的类变量时,我们也在访问real和imag。

classname.class_variable (or) objectname.class_variable

因此,我对此表示怀疑。实数和imag是类变量还是数据描述符? 同样,对类start中的stopsteprange存有疑问。

需要澄清:

  1. 它们是数据描述符还是一种类变量?

  2. 如果它们是数据描述符,请向我解释为什么它们被称为数据描述符?

  3. 任何与我所怀疑的数据描述符有关的参考链接都是非常需要的

预先感谢

解决方法

一个descriptor is a special kind of object in Python,当它作为类变量存储时,通过实例查找它时会在其上运行特殊的方法。

描述符协议用于多种特殊行为,例如方法绑定(如何将self作为第一个参数传递)。通过property类型,该协议可轻松用于Python代码。该类型是一个描述符,您可以将其用作方法的装饰器,以便在查找属性时调用该协议(而无需用户显式调用)任何东西)。

在您的情况下,real类型的imagcomplex属性(以及range类型的三个属性)是描述符,但是它们是比其他人少花哨。相反,描述符就是属性访问针对不可变内置类(即,用C而不是纯Python实现的实例)的工作方式。 complex(或range)对象的实际数据存储在C结构中。该描述符允许Python代码对其进行访问。请注意,您无法分配这些属性,因为那样会破坏对象的不变性。

您可以使用property实现类似的类型:

class MyComplex():
    def __init__(self,real=0,imag=0):
        self._real = real
        self._imag = imag

    @property
    def real(self):
        return self._real

    @property
    def imag(self):
        return self._imag

这里realimagproperty对象,它们的描述符类似于内置complex类型的描述符。它们也是只读的(尽管整个类不是 really 不变的)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...