只允许我填充创建的第一个类型的实例的类

2024-10-03 00:19:03 发布

您现在位置:Python中文网/ 问答频道 /正文

它就是这样做的:类的第一个实例的内容(在本例中是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()

Tags: 实例selfifdefwithcontentfillcolor
3条回答

我认为这个问题与如何有效地实现一个单例有关。虽然您显然希望允许多个实例(因此您没有单实例),但仍然需要标识第一个实例。你知道吗

解决方案的问题是,您没有标识第一个实例,而是标识调用Fill()的第一个实例。你知道吗

您需要在构造函数中设置类变量。也许这个优秀的Wikipedia article提供了一些额外的想法。你知道吗

所以您想要一个只允许您填充第一个创建类型的实例的类?你知道吗

class ContentError(Exception):
    pass

class Mok(object):

    _content = None

    def __init__(self, flavour):
        self.flavour = flavour
        if Mok._content is None:
            Mok._content = flavour

    def fill(self):
        if self._content == self.flavour:
            print 'Filling!'
        else:
            raise ContentError('This is a different mok!')

你为什么这么做?尝试:

class mok():

    def __init__(self, flavour):

        self.flavour = flavour
        self.is_empty = True

    def fill(self):

        print 'Filling mok!'
        self.is_empty = False


mok1 = mok('coffe')
mok2 = mok('tea')

mok1.fill()
mok1.fill()
mok2.fill()
mok1.fill()

输出:

Filling mok!
Filling mok!
Filling mok!
Filling mok!

我很困惑。。。你知道吗

相关问题 更多 >