gpt4 book ai didi

python - 使用对象组合时每次都实例化一个唯一的对象?

转载 作者:行者123 更新时间:2023-11-28 20:52:01 27 4
gpt4 key购买 nike

举个例子,只是几个将一起使用的虚拟对象。 FWIW 这是使用 Python 2.7.2。

class Student(object):
def __init__(self, tool):
self.tool = tool

def draw(self):
if self.tool.broken != True:
print "I used my tool. Sweet."
else:
print "My tool is broken. Wah."

class Tool(object):
def __init__(self, name):
self.name = name
self.broken = False

def break(self):
print "The %s busted." % self.name
self.broken = True

Hammer = Tool(hammer)
Billy = Student(Hammer)
Tommy = Student(Hammer)

这可能是足够的代码,你知道我要去哪里了。如果我调用 Hammer.break(),我是在对象的同一个实例上调用它;如果比利的锤子坏了,汤米的也坏了(毕竟是同一个锤子)。

现在很明显,如果程序仅限于 Billy 和 Tommy 作为 Students 的实例,那么解决方法就很明显了——实例化更多的 Hammers。但显然我在问,因为它不是那么简单,呵呵。我想知道是否有可能创建每次被调用时都显示为自身唯一实例的对象。

编辑:我得到的答案让我相信我对实例化的理解存在巨大漏洞。如果我有这样的东西:

class Foo(object):
pass

class Moo(Foo):
pass

class Guy(object):
def __init__(self, thing):
self.thing = thing

Bill = Guy(Moo())
Steve = Guy(Moo())

每次我使用 Moo() 时,它是一个单独的实例,还是它们都引用同一个对象?如果它们是分开的,那么我的整个问题都可以撤回,因为它必须为我的思绪让路。

最佳答案

您必须为每个学生创建该工具的新实例。

class Student(object):
def __init__(self, tool):
self.tool = tool

def draw(self):
if self.tool.broken != True:
print "I used my tool. Sweet."
else:
print "My tool is broken. Wah."

class Tool(object):
def __init__(self, name):
self.name = name
self.broken = False

def break(self):
print "The %s busted." % self.name
self.broken = True

# Instead of instance, make it a callable that returns a new one
def Hammer():
return Tool('hammer')

# Pass a new object, instead of the type
Billy = Student(Hammer())
Tommy = Student(Hammer())

关于python - 使用对象组合时每次都实例化一个唯一的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844187/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com