是的,之前已经问过这个问题.不,我读过的答案都没有解决我的问题.
我正在尝试制作一个小弹跳游戏.我创建了这样的砖块:
def __init__(self,canvas):
self.canvas = canvas
self.brick1 = canvas.create_rectangle(0,0,50,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick2 = canvas.create_rectangle(50,0,100,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick3 = canvas.create_rectangle(100,0,150,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick4 = canvas.create_rectangle(150,0,200,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick5 = canvas.create_rectangle(200,0,250,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick6 = canvas.create_rectangle(250,0,300,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick7 = canvas.create_rectangle(300,0,350,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick8 = canvas.create_rectangle(350,0,400,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick9 = canvas.create_rectangle(400,0,450,20,fill=random_fill_colour(),outline=random_fill_colour())
self.brick10 = canvas.create_rectangle(450,0,500,20,fill=random_fill_colour(),outline=random_fill_colour())
self.bricksId = [self.brick1,self.brick2,self.brick3,self.brick4,self.brick5,self.brick6,self.brick7,self.brick8,self.brick9,self.brick10]
Run Code Online (Sandbox Code Playgroud)
而我正在尝试引用bricksId[0]此处的ID :
self.hit_brick(pos,self.bricks.bricksId[0])
Run Code Online (Sandbox Code Playgroud)
之前,在中__init__,我将砖块定义为砖块,定义为Brick(canvas).但是,错误指出:
TypeError: 'Brick' object does not support indexing
Run Code Online (Sandbox Code Playgroud)
在对该主题的其他问题的答案中,我找不到任何帮助我访问的内容bricks.bricksId[0].
所以我发现帮助安装cx_Oracle但仍然卡住了.我从oracle下载了最新的instantclient,并将ORACLE_HOME设置为解压缩文件的位置(直接和ORACLE_HOME值与文件之间的bin文件夹),但easy_install在运行setup.py时弹出错误说它可以'找到Oracle包含文件.我注意到文件夹中只有11g dll,我是否需要所有3个驱动程序才能完成设置?如果是这样,我在哪里获得它们?
我有一个类,我使用标准的python单例形式.它也只是一个值,但不是在每个实例中初始化它,我在__new__()执行单例处理时启动它.这是pythonic方式吗?如果没有,我还能怎么做?
class Foo(object):
_inst = None
def __new__(cls, val):
if Foo._inst is None:
Foo._inst = super(Foo, self).__new__(cls)
Foo._inst.val = val
return Foo._inst
Run Code Online (Sandbox Code Playgroud)
这显然是简化形式.我已经使用了等待直到__init__()检查的结构并设置Foo._inst为一个单独的初始化处理运行,但在多线程情况下这似乎已经成熟同步错误.对于在现有实例中没有可能被损坏的值的情况如果__init__()再次运行,将init放入其中是没有害处的__init__(),除了你运行的代码在你不需要的时候实际上什么都不做,但是那里通常是腐败的状态值,我不想覆盖.我知道单身人士也是邪恶的,但有时候,他们是最好的解决方案(比如定义我希望能够检查的特殊用途类型is).
这似乎是我能想到的最好的解决方案,但我觉得初始化实例值很脏__new__().有没有人有关于如何更好地处理这个问题的想法?
我实现了一个元类,该元类拆解使用它创建的类的类属性,并根据这些参数中的数据构建方法,然后将这些动态创建的方法直接附加到类对象上(所涉及的类可轻松定义Web表单对象,在网络测试框架中使用)。它一直工作得很好,但是现在我需要添加一个更复杂的方法类型,为了保持环境整洁,我将其实现为可调用类。不幸的是,当我尝试在实例上调用可调用类时,将其视为类属性而不是实例方法,并且在调用时仅接收其自己的self。我知道为什么会发生这种情况,但我希望有人能提供比我提出的解决方案更好的解决方案。问题的简化图示:
class Foo(object):
def __init__(self, name, val):
self.name = name
self.val = val
self.__name__ = name + '_foo'
self.name = name
# This doesn't work as I'd wish
def __call__(self, instance):
return self.name + str(self.val + instance.val)
def get_methods(name, foo_val):
foo = Foo(name, foo_val)
def bar(self):
return name + str(self.val + 2)
bar.__name__ = name + '_bar'
return foo, bar
class Baz(object):
def __init__(self, val):
self.val = val
for method in get_methods('biff', 1):
setattr(Baz, method.__name__, method)
baz = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用映射表创建一个简单的多对多关系,其中包含有关它使用 SQLAlchemy 两端的关联代理表示的关系的元数据。但是,我似乎无法让它发挥作用。这是我一直在尝试弄清楚的玩具示例:
Base = declarative_base()
def bar_creator(bar):
_ = FooBar(bar=bar)
return bar
class Foo(Base):
__tablename__ = 'foo'
id = Column(Integer, primary_key=True)
name = Column(String)
bars = association_proxy('bar_associations', 'bar',
creator=bar_creator)
def foo_creator(foo):
_ = FooBar(foo=foo)
return foo
class Bar(Base):
__tablename__ = 'bar'
id = Column(Integer, primary_key=True)
name = Column(String)
foos = association_proxy('foo_associations', 'foo',
creator=foo_creator)
class FooBar(Base):
__tablename__ = 'fooBar'
foo_id = Column(Integer, ForeignKey('foo.id'), primary_key=True)
bar_id = Column(Integer, ForeignKey('bar.id'), primary_key=True)
bazed = Column(Boolean)
foo = relationship(Foo, backref='bar_associations')
bar = relationship(Bar, backref='foo_associations') …Run Code Online (Sandbox Code Playgroud) 所以我有这个:
class Parent(object):
def __init__(self, val):
print 'enter Base init'
self._set_x(val)
print 'leave Base init'
def _get_x(self):
return self._x
def _set_x(self, val):
print 'enter Base _set_x'
self._x = val
print 'leave Base _set_x'
x = property(_get_x, _set_x)
class Child(Parent):
def _set_x(self, val):
print 'enter Child _set_x'
y = val * 2
super(Child, self)._set_x(y)
print 'leave Child _set_x'
child = Child(5)
num = child.x
child.x = 5
print num == child.x
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了这个:
enter Base init
enter Child _set_x
enter Base _set_x …Run Code Online (Sandbox Code Playgroud) python ×6
associations ×1
callable ×1
class ×1
cx-oracle ×1
easy-install ×1
indexing ×1
methods ×1
object ×1
overriding ×1
properties ×1
relationship ×1
sqlalchemy ×1
typeerror ×1
windows ×1