18305177067 发表于 2023-2-3 21:02:44

报错cannot assign to function call,无法运行

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')
请求大佬帮忙看看

tommyyu 发表于 2023-2-3 21:05:37

D又没有定义__init__函数,不能像函数一样直接调用

18305177067 发表于 2023-2-3 21:19:14

tommyyu 发表于 2023-2-3 21:05
D又没有定义__init__函数,不能像函数一样直接调用

报错的是第9行的instance显示cannot assign to function call

tommyyu 发表于 2023-2-3 21:22:28

18305177067 发表于 2023-2-3 21:19
报错的是第9行的instance显示cannot assign to function call

有好几个错误{:10_282:}
1. __init__未定义
2. 缩进问题
3. 第九行,__dict__后面的(self.name)改成class D:
    def __init__(self, name):
      self.name = name
    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__=value

class C:
    x=D('x')

isdkz 发表于 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

class D:
    def __init__(self, name):
      self.name = name         # 如果没有 __init__,在实例化的时候是不能赋初值的
    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__=value         # 因为 __dict__ 是一个字典,无法调用,所以应该用 [],而不是 ()

class C:
    x=D('x')

c = C()
print(c.x)

歌者文明清理员 发表于 2023-2-6 11:43:07

他报的错是syntaxerror语法错误,虽然没有主程序调用,但是python是先检查你的语法的,它发现你副职给了函数get,于是报错。这行instance.__dict__ = value,@isdkz已经指出来了
syntax(语法)检查之后才检查你的代码,它发现你没有__init__,于是他又会爆错
主程序加上:print(C().x)
(错别字请见谅)
页: [1]
查看完整版本: 报错cannot assign to function call,无法运行