在Python documentation中,它说在创建对象后,它有identity, type
和value
。一旦创建,身份和类型就无法改变。
仅当身份,类型和值相同时,is
运算符才会返回True
。运算符==
比较对象的值。
那么对象的属性是什么?
对象和属性之间的链接是什么?
以下是我的假设:对象的属性实际上是在对象之间引用的。它代表了对象的关系。对象的属性是另一个对象。它更像是一个' C'语言指针。
这是对的吗?
答案 0 :(得分:3)
首先,您需要了解变量和对象的概念。
在Python中,当您执行x = 42
时,您正在做两件事。
int
的对象并将其存储在内存中(CPython中有一个小的整数的快捷方式,但我们可以认为它对于任何小的整数来说都是相同的类型)。x
引用该对象。来源:https://www.python-course.eu/images/python_variable_1.png
因此,对象将具有一个标识,这将是一个引用该对象的数字id,并且只引用该对象(在CPython中该数字是内存地址,但这是特定于实现的),一种类型,在我们的例子中将是int
,以及一个值,在我们的案例中为42。
标识和类型永远不会改变,值将取决于对象类型本身。 list
和dict
等可变对象允许更改其值,而无需使用新值创建另一个对象,而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个变量(Animal
,dog
& 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__
方法;它旨在比较对象值,但没有义务这样做。