complex.conjugate(2+3j) 和 (2+3j).conjugate() 的 结 果 均 为 2-3j 。 不 过 , 也 说 明complex.conjugate 是 1 个参数的函数, (2+3j).conjugate 是无需参数的函数。用属性实现原理解释一下这(类型和其实例的同名属性不一样)是怎么做到的
时间: 2024-03-28 18:39:57 浏览: 86
定义一个名为complex 的复数类,其属性数据为复数的实部和虚部,要求构造函数和拷贝构造函数,并能打印复数的值
5星 · 资源好评率100%
在 Python 中,函数和方法都是一等公民,也就是说,它们都是对象。对于一个对象,它可能会有一些属性,这些属性可以是数据属性,也可以是方法属性(也就是函数或方法)。当我们调用一个对象的方法时,实际上是在调用这个对象的方法属性。同时,Python 中,类和实例都可以拥有属性,但是它们拥有的同名属性是不同的。
对于 `complex.conjugate(2+3j)`,我们实际上是调用了 `complex` 类的 `conjugate` 方法属性,并且把 `(2+3j)` 作为方法的参数传入。而对于 `(2+3j).conjugate()`,我们是在调用 `(2+3j)` 的 `conjugate` 方法属性,这个方法属性不需要参数。
在 Python 中,实例和类可以拥有同名的方法属性或数据属性,但是它们是不同的。对于实例,它拥有自己的属性,这些属性存储在实例的命名空间中;而对于类,它也有自己的属性,这些属性存储在类的命名空间中。当我们调用一个实例的方法属性时,实际上是在调用这个实例的类的方法属性,并且把这个实例本身作为方法的第一个参数传入。这个第一个参数通常被称为 `self`,它指向的就是这个实例本身。因此,我们也可以通过类来调用实例的方法属性,只需要把实例作为方法的第一个参数传入即可。
因此,对于 `complex.conjugate(2+3j)` 和 `(2+3j).conjugate()`,它们的结果是一样的,都是 `2-3j`。但是调用它们的方式是不同的。`complex.conjugate` 是一个类方法,它需要一个参数;而 `(2+3j).conjugate` 是一个实例方法,它不需要参数。
阅读全文