如何在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
相关产品推荐
相关产品推荐

