在 Python 中,为啥我不能为 str 类设置属性? [复制]

Posted

技术标签:

【中文标题】在 Python 中,为啥我不能为 str 类设置属性? [复制]【英文标题】:In Python, Why can't i set attributes to the str class? [duplicate]在 Python 中,为什么我不能为 str 类设置属性? [复制] 【发布时间】:2021-11-24 05:11:09 【问题描述】:
class Sample:
    pass


sample = Sample()
sample.a = "magic"

print(sample.a)

在上面的代码中,我创建了一个空的classSample,并且能够在class 定义之外添加一个attribute。尝试对strinstance 做同样的事情,但我遇到了AttributeError: 'str' object has no attribute 'a'。为什么我不能对strinstance 做同样的事情。这与strprimitive 类型有什么关系吗?

sample_string = ""
sample_string.a = "magic"

print(sample_string.a)

【问题讨论】:

【参考方案1】:

python 中的大多数内置类不允许您分配任意属性。你可以在很多子类的基础上创建自己的子类(例如 list 和 dict),然后这样做。

str 有点特殊,因为它具有不可变的性质——本质上,python 可以通过始终使用同一个字符串来避免为同一个字符串提供多个缓冲区。但是,您仍然可以通过覆盖 new 而不是 init 来继承它: How to subclass str in Python

【讨论】:

以上是关于在 Python 中,为啥我不能为 str 类设置属性? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将类构造函数参数设置为默认值?

为啥我不能在 python 中访问这个类成员?

为啥全局修饰符不能正常工作?

为啥我不能将 str 列表转换为浮点列表?

为啥我不能在类方法中使用 python 模块 concurrent.futures?

为啥我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?