错误提示:AttributeError: property 'name' of 's' object has no setter
时间: 2023-08-02 16:08:58 浏览: 523
这个错误提示是因为你定义了一个只读的属性`name`,但没有定义对应的setter方法。
在你的代码中,你使用`@property`装饰器定义了一个getter方法来获取`name`属性的值,但没有定义setter方法来设置`name`属性的值。因此,当你尝试给`obj.name`赋值时,会出现该错误提示。
要解决这个问题,你可以添加一个setter方法来设置`name`属性的值。下面是修正后的代码示例:
```python
class s:
def __init__(self, name, age):
self._name = name
self.age = age
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
obj = s('沈浪', 22)
print(obj.name) # 输出:沈浪
obj.name = '张三'
print(obj.name) # 输出:张三
```
在修正后的代码中,我添加了一个`name`的setter方法,并使用`@name.setter`装饰器将其与`name`属性绑定。这样,你就可以通过给`obj.name`赋值来设置`name`属性的值了。
相关问题
还是报这个错误AttributeError: property 'book' of 'OpenpyxlWriter' object has no setter
非常抱歉给您带来的困扰,我之前的回答仍然有误。根据您提供的错误信息,确实是因为 `pd.ExcelWriter` 对象的 `book` 属性没有设置方法引起的。
在 Pandas 中,`pd.ExcelWriter` 对象并没有提供直接设置 `book` 属性的方法。如果您想要操作 Excel 文件的工作簿对象,可以使用 openpyxl 库来实现。
以下是一个示例代码,展示如何使用 openpyxl 库来操作 Excel 文件的工作簿:
```python
import pandas as pd
from openpyxl import load_workbook
# 读取数据
df = pd.read_excel(r'E:\桌面\新格式表格\excel表格.xlsx', sheet_name='1月份', engine='openpyxl')
i = df.shape[0]
o = df.shape[1]
# 创建要追加的数据框
data = {'number': ['23'],
'name': [13],
'age': [16]
}
new_data = pd.DataFrame(data)
# 加载已存在的Excel工作簿
book = load_workbook(r'E:\桌面\新格式表格\excel表格.xlsx')
# 获取指定工作表
writer = pd.ExcelWriter(r'E:\桌面\新格式表格\excel表格.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
# 将数据追加到现有工作表
new_data.to_excel(writer, sheet_name='1月份', header=False, index=False, startrow=i+1, startcol=o)
# 保存并关闭文件
writer.save()
writer.close()
# 打印原始数据和追加的数据
print(df)
print(new_data)
```
这段代码中,我们首先读取了原始的 Excel 数据到一个数据框 `df` 中。然后,我们创建要追加的新数据框 `new_data`。接下来,我们加载现有的 Excel 工作簿,并使用 `load_workbook` 函数加载文件。然后,我们使用 `pd.ExcelWriter` 创建一个写入器,并将已存在的工作簿设置为写入器的属性。接着,我们使用 `to_excel` 方法将新数据追加到指定的工作表中。最后,我们保存并关闭文件。
请确保指定的工作表名字正确,并且在运行代码之前关闭 Excel 文件,以免发生冲突。
如果问题仍然存在,请提供完整的错误信息以便我更好地帮助您解决问题。非常抱歉给您带来的困扰。
AttributeError: property 'sheets' of 'OpenpyxlWriter' object has no setter
根据您提供的错误信息,这个错误是由于 `pd.ExcelWriter` 对象的 `sheets` 属性没有设置方法引起的。这可能是由于您使用的 Pandas 版本与 openpyxl 库的版本不兼容导致的。
解决这个问题的方法是确保 Pandas 和 openpyxl 库的版本兼容。您可以尝试升级或降级 Pandas 和 openpyxl 库来解决这个问题。
另外,您可以尝试使用 `with` 语句来创建 `pd.ExcelWriter` 对象,并在写入数据之前使用 `writer.sheets` 属性来设置工作表字典。例如:
```python
with pd.ExcelWriter(r'E:\桌面\新格式表格\excel表格.xlsx', mode='a', engine='openpyxl') as writer:
writer.book = load_workbook(r'E:\桌面\新格式表格\excel表格.xlsx')
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
a.to_excel(writer, sheet_name='1月份', header=False, index=False, startrow=i+1, startcol=o)
```
这样可以避免手动设置 `writer.book` 和 `writer.sheets` 属性的问题。
如果问题仍然存在,请提供完整的错误信息以便我更好地帮助您解决问题。
阅读全文