You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用自定义名称实例化Python类?解决'str'对象无price属性报错

解决自定义名称实例化Zone类的属性访问问题

先拆解你踩的两个坑:

第一个错误:变量被覆盖成字符串

你大概率写了类似这样的代码:

class Zone:
    def __init__(self, price):
        self.price = price

# 先创建Zone实例
zone = Zone(100)
# 然后把同一个变量改成了字符串
zone = "我的区域"
# 这时zone已经是字符串了,自然找不到price属性
print(zone.price)

问题出在zone变量被你二次赋值成了字符串,原来的Zone实例被直接覆盖,字符串类型当然没有price属性。

第二个错误:搞混实例和字符串变量

你后来给实例加了name属性,但还是错误去访问字符串的price,应该是写成了这样:

zone = Zone(100)
zone.name = "我的区域"
# 错误地去访问字符串变量的price
zone_name = "我的区域"
print(zone_name.price)

这里zone_name只是个普通字符串,和Zone实例完全没关系,要访问price必须用你创建的Zone实例对象。

正确的两种写法

写法一:初始化时直接传入自定义名称

如果可以修改Zone类,直接把name加到构造方法里:

class Zone:
    def __init__(self, name, price):
        self.name = name
        self.price = price

# 实例化时直接传自定义名称和价格
my_zone = Zone("我的专属区域", 180)
print(my_zone.name)  # 输出:我的专属区域
print(my_zone.price)  # 输出:180

写法二:实例化后添加name属性(不修改原类)

如果不能改原Zone类,创建实例后再给它加name属性,记住要通过实例访问price:

class Zone:
    def __init__(self, price):
        self.price = price

my_zone = Zone(180)
my_zone.name = "我的专属区域"
# 用实例对象访问属性,别碰单独的字符串变量
print(my_zone.name)
print(my_zone.price)

核心要点:

  • 别重复给存储实例的变量赋值成其他类型,不然实例引用会直接丢失
  • 类的属性只能通过类的实例对象访问,和单独的字符串变量没有关联

内容的提问来源于stack exchange,提问作者shampeloenze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:29:31