我想要的是这种行为:
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
.如何获得单独的实例来实现我想要的行为?
是否有任何有意义的区别:
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)
如果您要创建大量实例,那么这两种样式的性能或空间要求是否存在差异?当您阅读代码时,您是否认为两种样式的含义有显着差异?
我想在每个表单中显示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的新手,它是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中使用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中经历了(对我来说)非常奇怪的问题.
我有一个名为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 ×6
attributes ×1
class ×1
django ×1
django-forms ×1
python-2.7 ×1
reference ×1
super ×1