2024-06-14 17:44:56 发布
网友
在Pythondocumentation中,据说对象创建后,它有identity, type和value。一旦创建了它,就不能更改标识和类型。你知道吗
identity, type
value
只有当标识、类型和值相同时,is运算符才返回True。操作符==比较对象的值。你知道吗
is
True
==
那么对象的属性是什么?
对象和属性之间的联系是什么?
以下是我的假设:对象的属性实际上是在对象之间引用的。它表示对象的关系。一个对象的属性是另一个对象。它更像是一个“C”语言指针。你知道吗
是这样吗?你知道吗
首先你需要理解变量和对象的概念。你知道吗
在Python中,例如,当您执行x = 42时,您将执行两个操作。你知道吗
x = 42
int
x
资料来源:https://www.python-course.eu/images/python_variable_1.png
所以这个对象会有一个标识,它是一个数字标识,引用那个对象,并且只引用那个对象(在CPython中,这个数字是内存地址,但这是特定于实现的),一个类型,在我们的例子中是int,还有一个值,在我们的例子中是42。你知道吗
标识和类型永远不会更改,值将取决于对象类型本身。可变对象,如lists和dicts允许更改它们的值,而不必使用新值创建另一个对象,而ints、strs和tuples不允许更改它们的值,您将使用新值在另一个内存位置创建另一个对象。你知道吗
list
dict
str
tuple
任何对象的属性都是根据其类型存储的不同信息。在我们的例子中,int只存储整数,但是可能有更复杂的类型存储更多的信息。例如,表示到HTTP服务器的连接的对象可能具有存储IP地址和端口的属性,或者连接到DB的类需要用户和密码。这些都是属性。我将使用一个表示动物的自定义创建类作为示例。你知道吗
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.")
在本例中,我们将有3个类型为Animal的对象,每个对象都有自己的id和两个属性,腿的数量和高度(以米为单位),值将是其所有属性的集合。我们还有3个变量(dog,horse&;spider)引用/指向这些对象。然后我们在控制台中打印:
Animal
dog
horse
spider
The height of a dog is 0.5 meters and has 4 legs.
print()函数中的str()函数返回其他类型为str的对象,其值为"0.5"和"4",这样我们就可以用+运算符连接所有的str。你知道吗
print()
str()
"0.5"
"4"
+
对于自定义(非内置)类,对象的“值”是所有属性值的总和,大致上是(或者说,对象的属性字典的值,可用作obj.__dict__)。属性如何准确地保存值(不管它是原语值本身,还是对另一个对象的引用)是一个实现细节,最终并不重要。对于内置类,文本将继续定义每个类的值。注意,这里的“值”是一个抽象概念,用于描述Python的行为,实际上并不是Python本身显式存在的东西。你知道吗
obj.__dict__
操作符==只调用__eq__方法;它旨在比较对象值,但没有义务这样做。你知道吗
__eq__
首先你需要理解变量和对象的概念。你知道吗
在Python中,例如,当您执行
x = 42
时,您将执行两个操作。你知道吗int
的对象并将其存储在内存中(在CPython中有一个小int的快捷方式,但是让我们考虑一下它对小int的行为与对任何类型的行为相同)。你知道吗x
引用该对象。你知道吗资料来源:https://www.python-course.eu/images/python_variable_1.png
所以这个对象会有一个标识,它是一个数字标识,引用那个对象,并且只引用那个对象(在CPython中,这个数字是内存地址,但这是特定于实现的),一个类型,在我们的例子中是
int
,还有一个值,在我们的例子中是42。你知道吗标识和类型永远不会更改,值将取决于对象类型本身。可变对象,如
list
s和dict
s允许更改它们的值,而不必使用新值创建另一个对象,而int
s、str
s和tuple
s不允许更改它们的值,您将使用新值在另一个内存位置创建另一个对象。你知道吗任何对象的属性都是根据其类型存储的不同信息。在我们的例子中,
int
只存储整数,但是可能有更复杂的类型存储更多的信息。例如,表示到HTTP服务器的连接的对象可能具有存储IP地址和端口的属性,或者连接到DB的类需要用户和密码。这些都是属性。我将使用一个表示动物的自定义创建类作为示例。你知道吗在本例中,我们将有3个类型为
Animal
的对象,每个对象都有自己的id和两个属性,腿的数量和高度(以米为单位),值将是其所有属性的集合。我们还有3个变量(dog
,horse
&;spider
)引用/指向这些对象。然后我们在控制台中打印:print()
函数中的str()
函数返回其他类型为str
的对象,其值为"0.5"
和"4"
,这样我们就可以用+
运算符连接所有的str
。你知道吗对于自定义(非内置)类,对象的“值”是所有属性值的总和,大致上是(或者说,对象的属性字典的值,可用作
obj.__dict__
)。属性如何准确地保存值(不管它是原语值本身,还是对另一个对象的引用)是一个实现细节,最终并不重要。对于内置类,文本将继续定义每个类的值。注意,这里的“值”是一个抽象概念,用于描述Python的行为,实际上并不是Python本身显式存在的东西。你知道吗操作符
==
只调用__eq__
方法;它旨在比较对象值,但没有义务这样做。你知道吗相关问题 更多 >
编程相关推荐