它就是这样做的:类的第一个实例的内容(在本例中是mok1)充满了水。我可以无限地填充它,但一旦创建了第一个实例,我就只能填充该实例并通过任何其他实例生成错误。有没有更干净更好的方法?现在我使用类的var和实例的var之间的差异,这让人困惑,因为它们是不同的变量。伙计们;)
class mok:
_content = 'EMPTY'
def __init__( self flavour ):
self.flavour = flavour
def fill( self ):
if mok._content == 'EMPTY':
self._content = '1'
mok._content = 1
if self._content == '1':
print 'Filling mok!'
else:
print 'Error: This is a different mok!'
mok1 = mok( 'thea' )
mok2 = mok( 'coffee' )
mok1.fill()
mok1.fill()
mok2.fill()
mok1.fill()
输出:
Filling mok!
Filling mok!
Error: This is a different mok!
Filling mok!
我找到了解决办法:
class mok:
_mok_with_water = 0
def __init__( self, color, flavour ):
self.color = color
self.flavour = flavour
def printcolor( self ):
print 'Mok color =', self.color
print 'Mok flavour =', self.flavour
def fill( self ):
self.printcolor()
if mok._mok_with_water == 0:
mok._mok_with_water = self
if mok._mok_with_water == self:
print 'Filling mok!'
else:
print 'Error: This is a different mok!'
def empty( self ):
if self == mok._mok_with_water:
mok._mok_with_water = 0
mok1 = mok( 'geel', 'thee' )
mok2 = mok( 'zwart', 'koffie' )
mok1.fill()
mok1.fill()
mok2.fill()
obj = mok1.empty()
obj = mok2.fill()
obj = mok1.fill()
我认为这个问题与如何有效地实现一个单例有关。虽然您显然希望允许多个实例(因此您没有单实例),但仍然需要标识第一个实例。你知道吗
解决方案的问题是,您没有标识第一个实例,而是标识调用Fill()的第一个实例。你知道吗
您需要在构造函数中设置类变量。也许这个优秀的Wikipedia article提供了一些额外的想法。你知道吗
所以您想要一个只允许您填充第一个创建类型的实例的类?你知道吗
你为什么这么做?尝试:
输出:
我很困惑。。。你知道吗
相关问题 更多 >
编程相关推荐