如何用自定义名称实例化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
相关产品推荐
相关产品推荐

