gpt4 book ai didi

python - 为什么使用 string.__class__(string) 进行字符串赋值?

转载 作者:行者123 更新时间:2023-12-01 07:18:24 29 4
gpt4 key购买 nike

我正在分析 BeautifulSoup 的源代码,在 @string.setter 属性中,我注意到一个神秘的字符串赋值,我想知道是否有一些我不知道的东西?

来自 BeautilfulSoup 的 element.py 标签类:

@property
def string(self):
"""Convenience property to get the single string within this tag.
:Return: If this tag has a single string child, return value
is that string. If this tag has no children, or more than one
child, return value is None. If this tag has one child tag,
return value is the 'string' attribute of the child tag,
recursively.
"""
if len(self.contents) != 1: return None
child = self.contents[0]
if isinstance(child, NavigableString): return child
return child.string

@string.setter
def string(self, string):
self.clear()
self.append(string.__class__(string))

我的问题是最后一行。没有检查 type(...) 所以他们不能只使用:self.append(string) 吗?

我已经运行了自己的代码来查看最后一行在做什么,它似乎正在设置变量的值...

>>> x = "my-string"
>>> x.__class__
<class 'str'>
>>> x.__class__(x)
'my-string'
>>> type(x.__class__(x))
<class 'str'>
>>>

所以我想知道这是什么原因?这是否只是开发者的偏好?我们有什么收获吗?

最佳答案

在 Python 中对相同类型的对象调用基本类型的构造函数是创建其副本的惯用方法,例如 list(a_local_list)

beautifulsoup 中的 .string 对象似乎不仅仅是一个 str 对象。 https://stackoverflow.com/a/25328374/447599这意味着 .string 对象可能是可变的。在 python 中创建 str 对象的副本是没有意义的,因为它们不可变。

关于python - 为什么使用 string.__class__(string) 进行字符串赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57837924/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com