吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 756|回复: 4
收起左侧

[已解决] 关于循环引用的问题

  [复制链接]
batu1579 发表于 2022-11-14 15:07
本帖最后由 batu1579 于 2022-11-15 13:49 编辑

我分别定义了两个类:

  • 可以被吃的
  • 可以吃东西的

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

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

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
[Python] 纯文本查看 复制代码
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在最前面提前声明一下,完整代码:
[Python] 纯文本查看 复制代码
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
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-17 11:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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