python 2.7.5中类中属性的奇怪行为

时间:2015-12-14 07:46:57

标签: python python-2.7 class

我是在python中创建类的新手。 但我在版本2.7上有一个奇怪的行为。 5 。 2.7.8或2.7.1或3没有问题,只有2.7。 5

尝试使用我的课程时出现此错误

# ./script_testing.py 
Linux
('CentOS Linux', '7.1.1503', 'Core')
Traceback (most recent call last):
  File "./script_testing.py", line 1204, in <module>
    print(x.DIST)
AttributeError: WhatsName instance has no attribute 'DIST'

我的代码:

import platform

class WhatsName():
    """Distributive version checking and soft installing"""
    def __init__(self):

        self.PLAT=platform.system()
        self.DISTRIB=platform.linux_distribution()

        if self.PLAT=='Linux' or self.PLAT=='Linux2':
            if self.DISTRIB[0]=='debian':
                self.DIST='Debian'
            elif self.DISTRIB[0]=='Ubuntu':
                self.DIST='Ubuntu'
            elif self.DISTRIB[0]=='CentOS':
                self.DIST='Centos'
            elif self.DISTRIB[0]=='Fedora':
                self.DIST='Fedora'
            elif 'SUSE' in self.DISTRIB[0]:
                self.DIST='Suse'
            elif self.DISTRIB[0]=='Slackware':
                self.DIST='Slackware'
            else:
                pass
        elif self.PLAT=='FreeBSD':
            self.DIST='FreeBSD'
        elif PLAT=='Windows':
            self.DIST='Windows'
        elif PLAT=='Darwin':
            self.DIST='MacOS'
        else:
            self.DIST='Unknown'

    def CheckSystem(self):
        pass

    def InstallSoft(self,x,y):
        pass


x=WhatsName()
print(x.PLAT)
print(x.DISTRIB)
print(x.DIST)     <== This string generates the error

所以,我不明白为什么DIST不是WhatsName类的属性。 为什么它只在版本2.7.5上发生

在其他版本中我得到正常结果:

"script_testing.py" 1233L, 26872C записано
:!python2.7 script_testing.py
Linux
('debian', '7.1', '')
Debian

1 个答案:

答案 0 :(得分:0)

您的if个语句都不匹配self.DISTRIB的第一个值:

('CentOS Linux', '7.1.1503', 'Core')

字符串为'CentOS Linux',但您不测试该字符串,因此永远不会设置self.DIST

您只测试字符串'CentOS'

elif self.DISTRIB[0]=='CentOS':
    self.DIST='Centos'

此行永远不匹配,此if...elif...语句中的其他测试也不匹配。由于此处没有else来设置self.DIST,因此最后会出现属性错误。

您可以修复该行:

elif self.DISTRIB[0]=='CentOS Linux':
    self.DIST='Centos'

我还会在开始时设置self.DIST = 'Unknown' ,因此您有一个默认值,然后让您的if分支集确定更精确的值。