相关疑难解决方法(0)

如何避免在实例之间共享类数据?

我想要的是这种行为:

class a:
    list = []

x = a()
y = a()

x.list.append(1)
y.list.append(2)
x.list.append(3)
y.list.append(4)

print(x.list) # prints [1, 3]
print(y.list) # prints [2, 4]
Run Code Online (Sandbox Code Playgroud)

当然,我打印时真正发生的是:

print(x.list) # prints [1, 2, 3, 4]
print(y.list) # prints [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

显然,他们正在课堂上分享数据a.如何获得单独的实例来实现我想要的行为?

python class

133
推荐指数
5
解决办法
2万
查看次数

类和实例属性有什么区别?

是否有任何有意义的区别:

class A(object):
    foo = 5   # some default value
Run Code Online (Sandbox Code Playgroud)

class B(object):
    def __init__(self, foo=5):
        self.foo = foo
Run Code Online (Sandbox Code Playgroud)

如果您要创建大量实例,那么这两种样式的性能或空间要求是否存在差异?当您阅读代码时,您是否认为两种样式的含义有显着差异?

python attributes member-variables

127
推荐指数
4
解决办法
6万
查看次数

如何在Django的formset中向表单添加纯文本信息?

我想在每个表单中显示db查询的标题和描述,但我不希望它在charfield中,我希望它是html格式的文本.

示例模板代码:

{% for form, data in zipped_data %}
   <div class="row">
      <div class="first_col">
         <span class="title">{{ data.0 }}</span>
         <div class="desc">
            {{ data.1|default:"None" }}
         </div>
      </div>
      {% for field in form %}
         <div class="fieldWrapper" style="float: left; ">
            {{ field.errors }}
            {{ field }}
         </div>
      {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这是最惯用的方式吗?或者,有没有办法添加不会在textarea或文本输入中显示的文本到我的模型:

class ReportForm(forms.Form):
   comment = forms.CharField()
Run Code Online (Sandbox Code Playgroud)

python django django-forms

6
推荐指数
2
解决办法
5945
查看次数

Python OOP和列表

我是Python的新手,它是OOP的东西,无法让它工作.这是我的代码:

class Tree:

    root = None;
    data = [];

    def __init__(self, equation):
        self.root = equation;

    def appendLeft(self, data):
        self.data.insert(0, data);

    def appendRight(self, data):
        self.data.append(data);

    def calculateLeft(self):
        result = [];
        for item in (self.getLeft()):
            if (type(item) == type(self)):
                data = item.calculateLeft();
            else:
                data = item;
            result.append(item);
        return result;

    def getLeft(self):
        return self.data;

    def getRight(self):
        data = self.data;
        data.reverse();
        return data;

tree2 = Tree("*");
tree2.appendRight(44);
tree2.appendLeft(20);

tree = Tree("+");
tree.appendRight(4);
tree.appendLeft(10);
tree.appendLeft(tree2);

print(tree.calculateLeft());
Run Code Online (Sandbox Code Playgroud)

看起来树2和树正在共享列表"数据"?

目前我希望输出像[[20,44],10,4]这样的东西,但是当我

tree.appendLeft(tree2) 
Run Code Online (Sandbox Code Playgroud)

我得到了RuntimeError: maximum recursion depth exceeded …

python class-variables

4
推荐指数
1
解决办法
589
查看次数

在Python中使用super执行父级函数

我在Python中使用super函数时遇到了一些问题.假设我有这两个类:

class A(object):
     x=5
     def p(self):
             print 'A'
     def f(self):
             self.p()
             self.x+=1

class B(A):
    def p(self):
             print 'B'
    def f(self):
             super(B, self).f()
             self.x*=2

b = B()
b.f()
Run Code Online (Sandbox Code Playgroud)

然后bx将等于12,但函数将输出'B',而不是'A'.我需要的是执行Ap而不是Bp,我怎样才能实现呢?

谢谢你的时间 :)


编辑:好的,我认为你错过了一些关于我实际情况的细节,因为我的例子不好.让我们来看看真正的代码.我有这两个类(Django模型):

class Comment(Insert, models.Model):

    content = models.TextField()
    sender = models.ForeignKey('logic.User')
    sent_on = models.DateTimeField(auto_now_add=True)

    def __insert__(self):
        self.__notify__()

    def __notify__(self):
        receivers = self.retrieve_users()
        notif_type = self.__notificationtype__()
        for user in receivers:
            Notification.objects.create(
                object_id=self.id,
                receiver=user,
                sender_id=self.sender_id,
                type=notif_type
            )

    def __unicode__(self):
        return self.content

    class Meta:
        abstract = True


class UserComment(Comment):

    is_reply = models.BooleanField()
    reply_to = …
Run Code Online (Sandbox Code Playgroud)

python super python-2.7

4
推荐指数
1
解决办法
265
查看次数

Python参考问题

我在Python中经历了(对我来说)非常奇怪的问题.

我有一个名为Menu的类:(片段)

class Menu:
    """Shows a menu with the defined items"""
    menu_items = {}
    characters = map(chr, range(97, 123))

    def __init__(self, menu_items):
        self.init_menu(menu_items)

    def init_menu(self, menu_items):
        i = 0
        for item in menu_items:
            self.menu_items[self.characters[i]] = item
            i += 1
Run Code Online (Sandbox Code Playgroud)

当我实例化该类时,我传入一个字典列表.使用此功能创建词典:

def menu_item(description, action=None):
    if action == None:
        action = lambda : None
    return {"description": description, "action": action}
Run Code Online (Sandbox Code Playgroud)

然后列表创建如下:

t = [menu_item("abcd")]
m3 = menu.Menu(t)

a = [ menu_item("Test")]
m2 = menu.Menu(a)

b = [   menu_item("Update", m2.getAction),
                      menu_item("Add"),
                      menu_item("Delete")]
m = …
Run Code Online (Sandbox Code Playgroud)

python reference

3
推荐指数
2
解决办法
302
查看次数