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

如何在Python类中定义新属性?类方法添加属性报错求助

Car类添加set_publisher方法报错的解决办法

问题描述

我编写了一个包含3个私有属性的Car类:

class Car():
    def __init__(self, name, model, brand):
        self.__name = name
        self.__model = model
        self.__brand = brand

尝试为该类创建方法来设置新属性publisher,编写了如下代码但报错:

def set_publisher(self, publisher):
        self.__publisher = publisher


b1 = Car(name="X", model="Y", brand="Z")
publisher="D"
b1.set_publisher(publisher)

报错信息:

AttributeError: 'Car' object has no attribute 'set_publisher'

问题分析

报错的核心原因是**set_publisher方法没有被定义在Car类的内部**——你的代码里这个方法的缩进错误,和Car类处于同级作用域,并没有成为类的成员方法,因此实例调用时找不到该方法。

解决方法

将set_publisher方法的缩进调整到Car类的代码块范围内,使其成为类的成员方法即可。修改后的完整代码如下:

class Car():
    def __init__(self, name, model, brand):
        self.__name = name
        self.__model = model
        self.__brand = brand

    # 调整缩进,让方法属于Car类的一部分
    def set_publisher(self, publisher):
        self.__publisher = publisher


b1 = Car(name="X", model="Y", brand="Z")
publisher = "D"
b1.set_publisher(publisher)

# 如果需要外部获取这个私有属性,可以添加get方法
# def get_publisher(self):
#     return self.__publisher
# print(b1.get_publisher())  # 输出 D

补充说明

  • Python中,类的所有成员方法必须缩进在类定义的代码块内(与__init__方法同级缩进),否则会被视为全局函数,不属于该类。
  • 你用self.__publisher定义的是私有属性,外部无法直接通过b1.__publisher访问,如果需要外部读取该属性,建议添加对应的get_publisher方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:05:41