鱼C论坛

 找回密码
 立即注册
查看: 2839|回复: 5

[已解决]报错cannot assign to function call,无法运行

[复制链接]
发表于 2023-2-3 21:02:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class D:
    def __set_name__(self,owner,name):
            self.name=name
    def __get__(self,instance,owner):
            print("get~")
            return instance.__dict__.get(self.name)
    def __set__(self,instance,value):
            print("set~")
            instance.__dict__(self.name)=value

class C:
    x=D('x')
请求大佬帮忙看看
最佳答案
2023-2-6 11:43:07
他报的错是syntaxerror语法错误,虽然没有主程序调用,但是python是先检查你的语法的,它发现你副职给了函数get,于是报错。这行
  1. instance.__dict__[self.name] = value
复制代码
,@isdkz已经指出来了
syntax(语法)检查之后才检查你的代码,它发现你没有__init__,于是他又会爆错
主程序加上:
  1. print(C().x)
复制代码

(错别字请见谅)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-3 21:05:37 | 显示全部楼层
D又没有定义__init__函数,不能像函数一样直接调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-3 21:19:14 | 显示全部楼层
tommyyu 发表于 2023-2-3 21:05
D又没有定义__init__函数,不能像函数一样直接调用

报错的是第9行的instance显示cannot assign to function call
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-3 21:22:28 | 显示全部楼层
18305177067 发表于 2023-2-3 21:19
报错的是第9行的instance显示cannot assign to function call


有好几个错误
1. __init__未定义
2. 缩进问题
3. 第九行,__dict__后面的(self.name)改成[self.name]
  1. class D:
  2.     def __init__(self, name):
  3.         self.name = name
  4.     def __set_name__(self,owner,name):
  5.         self.name=name
  6.     def __get__(self,instance,owner):
  7.         print("get~")
  8.         return instance.__dict__.get(self.name)
  9.     def __set__(self,instance,value):
  10.         print("set~")
  11.         instance.__dict__[self.name]=value

  12. class C:
  13.     x=D('x')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-3 21:24:11 | 显示全部楼层
本帖最后由 isdkz 于 2023-2-3 21:28 编辑
18305177067 发表于 2023-2-3 21:19
报错的是第9行的instance显示cannot assign to function call


  1. class D:
  2.     def __init__(self, name):
  3.         self.name = name           # 如果没有 __init__,在实例化的时候是不能赋初值的
  4.     def __set_name__(self,owner,name):
  5.             self.name=name
  6.     def __get__(self,instance,owner):
  7.             print("get~")
  8.             return instance.__dict__.get(self.name)
  9.     def __set__(self,instance,value):
  10.             print("set~")
  11.             instance.__dict__[self.name]=value         # 因为 __dict__ 是一个字典,无法调用,所以应该用 [],而不是 ()

  12. class C:
  13.     x=D('x')

  14. c = C()
  15. print(c.x)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-6 11:43:07 | 显示全部楼层    本楼为最佳答案   
他报的错是syntaxerror语法错误,虽然没有主程序调用,但是python是先检查你的语法的,它发现你副职给了函数get,于是报错。这行
  1. instance.__dict__[self.name] = value
复制代码
,@isdkz已经指出来了
syntax(语法)检查之后才检查你的代码,它发现你没有__init__,于是他又会爆错
主程序加上:
  1. print(C().x)
复制代码

(错别字请见谅)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-2 12:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表