Python在条件下创建继承的类属性

2024-09-30 18:24:26 发布

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

class WineComponents(object):

    def __init__(self, aroma, body, acidity, flavor, color):
        self.aroma = aroma
        self.body = body
        self.acidity = acidity
        self.flavor = flavor
        self.color = color

可以这样实例化:

wine = Color(aroma='80%', body='30%', acidity='35%', flavor='90%', color='Red')

然后我希望能够创建将继承WineComponents()的特定类:

class Color(WineComponents): 

      def receipe(self):
          pass

在某些条件下,也要有自己的属性,比如:

class Color(WineComponents):

     if self.color == 'Red':
        region  = 'France'
        type = 'Bordeaux'

     def receipe(self):
         pass

调用属性时使用:

print wine.region

但这不起作用:

 if self.color == 'Red':
NameError: name 'self' is not defined

有解决办法吗?你知道吗


Tags: self属性defbodypassredclasscolor
2条回答

你可以用房产来做

class Wine(object):
    def __init__(self, aroma, body, acidity, flavor, color):
        self.aroma = aroma
        self.body = body
        self.acidity = acidity
        self.flavor = flavor
        self.color = color

    @property
    def region(self):
        if self.color == 'Red':
            return 'France'
        else:
            raise NotImplementedError('unknown region for this wine')

可以这样称呼:

>>> wine = Wine(aroma='80%', body='30%', acidity='35%', flavor='90%', color='Red')
>>> wine.region
'France'

这是我的五便士:

class WineComponents(object):

def __init__(self, aroma, body, acidity, flavor, color):
    self.aroma = aroma
    self.body = body
    self.acidity = acidity
    self.flavor = flavor
    self.color = color


class Color(WineComponents):
    def __init__(self, aroma, body, acidity, flavor, color):
        super(Color, self).__init__(aroma, body, acidity, flavor, color)
        if self.color == 'Red':
            self.region = 'France'
            self.type = 'Bordeaux'

    def receipe(self):
        pass

if __name__ == '__main__':
    wine = Color(aroma='80%', body='30%', acidity='35%', flavor='90%', 
    color='Red')
    print (wine.region, wine.type)

相关问题 更多 >