小编B.A*_*ler的帖子

理解`self`和`cls`之间的区别,因为它们指的是相同的属性

我试图理解他们之间的区别self,cls但是我很挣扎,即使它存在很多关于那个话题.例如:

class maclass():
    A = "class method"

    def __init__(self):
        self.B = "instance method"

    def getA_s(self):
        print(self.A)

    def getA_c(cls):
        print(cls.A)

    def getB_s(self):
        print(self.B)

    def getB_c(cls):
        print(cls.B)

C = maclass()
C.getA_s()
C.getA_c()
C.getB_s()
C.getB_c()
Run Code Online (Sandbox Code Playgroud)

这给了我:

class method
class method
instance method
instance method
Run Code Online (Sandbox Code Playgroud)

所以无论我使用什么selfcls它离开都是指相同的变量.当我加入 self.AInit__,该cls.A只是更换

def __init__(self):
        self.B = "instance method"
        self.A = "new instance method"
Run Code Online (Sandbox Code Playgroud)

我得到:

new instance method
new instance method
instance method
instance method
Run Code Online (Sandbox Code Playgroud)

如果它们是相同的话,我不明白有两种方法可以调用类成员吗?我知道这是这个论坛上的一个常见问题,但我真的不明白为什么我们可以用不同的词来指代同一个东西(我们甚至可以使用任何单词而不是selfcls …

python class self

6
推荐指数
1
解决办法
8668
查看次数

如何在不迭代的情况下从查询集中的多对多中删除对象?

在 Django 中,两个模型之间存在多对多关系。

我想从 model_two 的多个实例中删除 model_one 的实例。

我有:

user = User.objects.get(id=user_id)
conversations = Conversation.objects.filter(users=user)
for conversation in conversations.iterator():
    conversation.users.remove(user)
Run Code Online (Sandbox Code Playgroud)

这需要评估对话的每个实例。有没有一种方法可以在不迭代的情况下做到这一点?

更新:

添加模型以增加问题的清晰度。

class User(EditMixin):
    conversations = models.ManyToManyField('Conversation', related_name='users')
    name = models.CharField(max_length=255, blank=True, null=True)
    permalink = models.URLField(blank=True, max_length=2083)
    rating = models.DecimalField(decimal_places=2, max_digits=4, blank=True, default=0)
    remote_id = models.CharField(max_length=4096, blank=True, null=True)
    summary = models.CharField(max_length=255, blank=True, null=True)

    objects = UserManager()

class Meta:
    verbose_name_plural = 'Users'


class Conversation(EditMixin, BasicInfoMixin):
    content = models.TextField(blank=True, null=True)
    update_enabled = models.BooleanField(default=False)

    objects = ConversationManager()

class Meta:
    verbose_name_plural = 'Conversations' …
Run Code Online (Sandbox Code Playgroud)

django many-to-many django-models

5
推荐指数
1
解决办法
5432
查看次数

标签 统计

class ×1

django ×1

django-models ×1

many-to-many ×1

python ×1

self ×1