
1 j0hnj 2018-08-16 21:05:38 +08:00 via iPhone 标准库里一般有两种做法,一种是像 enum 这样的用 metaclass 黑魔法,另一种就是先创建类,然后再添加属性,比如 class A: pass class B: pass A.b = B() B.a = A() |
2 drlalll 2018-08-16 21:05:55 +08:00 应该用 new 新建对象吧 |
3 junezk OP @j0hnj 其实出现这个需求是我在使用 django RESTframework 做序列化时遇到的。 我在 django 中定义了一个类型的 model: class Channel(models.Model): """ 分类 """ nae = models.CharField(verbose_name="分类名称", max_length=40) display_name = models.CharField(verbose_name="显示名称", max_length=40) parent = models.ForeignKey("Channel", null=True, blank=True, related_name="sub_channels", on_delete=models.SET_NULL) Channel 对象的 parent 属性可以指向自己类型的对象。 做序列化时,就要定义 class ChannelSerializer(serializers.ModelSerializer): parent = ChannelSerializer(read_Only=True) class Meta: model = Channel fields = '__all__' 这样的代码,这就不符合 Python 的语法了。 使用你给出的解决办法,结果不对,没有达到享耀的效果。 |
4 lynskylate 2018-08-16 21:46:50 +08:00 via Android classmethod 会传入这个 class |
5 junezk OP @lynskylate 请问 classmethod 该如何使用?查了些资料,都没提到解决这种情况的。 |
6 vainl1 2018-08-16 22:09:10 +08:00 via iPhone |
8 Yourshell 2018-08-16 22:45:34 +08:00 via iPhone self.__class__ |
9 lynskylate 2018-08-16 22:46:15 +08:00 via Android sorry 刚才没看仔细,其实一楼是符合你最初的描述的,不过不符合你的需求。 你的要求是自引用序列化,可以看下这个,对于实在需要自定义程度很大的字段其实可以覆写他的 create valid 方法。 http://www.google.com/url?q=https://stackoverflow.com/questions/13376894/django-rest-framework-nested-self-referential-objects&sa=U&ved=2ahUKEwihxJmZ5_HcAhXov1QKHT0ECmcQFjAAegQIBxAB&usg=AOvVaw06lQugVRb1STGxI0PRr3Lz |
10 junezk OP @Yourshell self 是在类的实例中使用的,引用类的实例,也就是对象本身。现在需要的是类定义时,引用其自身。或者两个类相互引用时,前一个类如何引用后一个类的类型。 |
11 junezk OP @lynskylate 感谢,我需要的就是这个解决方案。baidu 搜了半天了也没找到相关的内容。 |