batu1579 发表于 2022-11-14 15:07

关于循环引用的问题

本帖最后由 batu1579 于 2022-11-15 13:49 编辑

我分别定义了两个类:

- 可以被吃的
- 可以吃东西的

可以被吃的应该只能被可以吃东西的示例吃,而同样的可以吃东西的应该只能吃可以被吃的东西

按照上面的描述写出来的代码如下:

```python
from abc import ABCMeta, abstractmethod


class CanBeEat(metaclass=ABCMeta):
    @abstractmethod
    def be_eaten(self, by: CanEat) -> None: pass


class CanEat(metaclass=ABCMeta):
    @abstractmethod
    def eat(self, target: CanBeEat) -> None: pass

```

但是实际运行的时候会出现被吃类中的参数(可以吃东西的)类型未定义,大大们有没有好的办法解决哇

Tao2817 发表于 2022-11-14 18:48

class CanEat:
    pass
提前声明一下,没用过python的类,但是我这么试了之后不报错了,运行正不正确我不知道

batu1579 发表于 2022-11-15 08:57

Tao2817 发表于 2022-11-14 18:48
提前声明一下,没用过python的类,但是 ...

可是大大我希望这两个是接口,那两个方法是抽象方法哇

Tao2817 发表于 2022-11-15 13:09

本帖最后由 Tao2817 于 2022-11-15 13:10 编辑

batu1579 发表于 2022-11-15 08:57
可是大大我希望这两个是接口,那两个方法是抽象方法哇
额我可能表述有问题。我是说把CanEat在最前面提前声明一下,完整代码:
from abc import ABCMeta, abstractmethod

class CanEat:
    pass

class CanBeEat(metaclass=ABCMeta):
    @abstractmethod
    def be_eaten(self, by: CanEat) -> None: pass

class CanEat(metaclass=ABCMeta):
    @abstractmethod
    def eat(self, target: CanBeEat) -> None: pass

class dog(CanEat):
    def eat(self, target: CanBeEat):
      print(f"dog eat {target}")

class meat(CanBeEat):
    def be_eaten(self, by: CanEat):
      print(f"meat is eaten by {by}")

d = dog()
m = meat()
d.eat(m)

batu1579 发表于 2022-11-15 13:49

哦哦好的谢谢大大 orz
页: [1]
查看完整版本: 关于循环引用的问题