我试图理解他们之间的区别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)
所以无论我使用什么self或cls它离开都是指相同的变量.当我加入 self.A的Init__,该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)
如果它们是相同的话,我不明白有两种方法可以调用类成员吗?我知道这是这个论坛上的一个常见问题,但我真的不明白为什么我们可以用不同的词来指代同一个东西(我们甚至可以使用任何单词而不是self或cls …
在 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)