对Python

时间:2017-11-20 06:19:53

标签: python python-3.x object

在Python documentation中,它说在创建对象后,它有identity, typevalue。一旦创建,身份和类型就无法改变。

仅当身份,类型和值相同时,is运算符才会返回True。运算符==比较对象的值。

  • 那么对象的属性是什么?

  • 对象和属性之间的链接是什么?

以下是我的假设:对象的属性实际上是在对象之间引用的。它代表了对象的关系。对象的属性是另一个对象。它更像是一个' C'语言指针。

这是对的吗?

2 个答案:

答案 0 :(得分:3)

首先,您需要了解变量和对象的概念。

在Python中,当您执行x = 42时,您正在做两件事。

  1. 创建一个值为42且类型为int的对象并将其存储在内存中(CPython中有一个小的整数的快捷方式,但我们可以认为它对于任何小的整数来说都是相同的类型)。
  2. 使用变量x引用该对象。
  3. Python variable 来源:https://www.python-course.eu/images/python_variable_1.png

    因此,对象将具有一个标识,这将是一个引用该对象的数字id,并且只引用该对象(在CPython中该数字是内存地址,但这是特定于实现的),一种类型,在我们的例子中将是int,以及一个值,在我们的案例中为42。

    标识和类型永远不会改变,值将取决于对象类型本身。 listdict等可变对象允许更改其值,而无需使用新值创建另一个对象,而int s,str和{ {1}}不允许更改其值,您将使用新值在另一个内存位置创建另一个对象。

    任何对象的属性都是它们存储的不同信息,具体取决于它们的类型。在我们的例子中,tuple只存储一个Integer,但可能有更复杂的类型存储更多信息。例如,表示与HTTP服务器的连接的对象可能具有存储IP地址和端口的属性,或者连接到DB的类将需要用户和密码。这些都是属性。我将使用代表动物的自定义创建类作为示例。

    int

    在这个例子中,我们将有3个class Animal: def __init__(self, legs, height): self.legs = legs self.height = height dog = Animal(4, 0.5) horse = Animal(4, 2) spider = Animal(8, 0.01) print("The height of a dog is "+str(dog.height)+" meters and has "+str(dog.legs)+" legs.") 类型的对象,每个对象都有自己的id和两个属性,腿数和以米为单位的高度,该值将是其所有属性的集合。我们还有3个变量(Animaldog& horse)引用/指向这些对象。然后我们打印到控制台:

    spider

    The height of a dog is 0.5 meters and has 4 legs. 函数中的str()函数返回print()类型的其他对象,其值为str"0.5",以便我们可以连接所有"4" str 1}}使用+运算符。

答案 1 :(得分:0)

对于自定义(非内置)类,"值"对象的所有属性值都是粗略地(或者,替代地说,对象的属性字典的值,可用作obj.__dict__)。精确属性如何保存值(它是一个原始值本身,还是对另一个对象的引用)是一个实现细节,最终并不重要。对于内置类,文本继续定义每个类的值。注意"值"这是一个抽象概念,用于描述Python的行为,实际上并不是Python本身明确存在的东西。

运营商==只是调用__eq__方法;它旨在比较对象值,但没有义务这样做。