Я новичок в создании класса в python. Но у меня странное поведение на версии 2.7. . Нет проблем на 2.7.8 или 2.7.1 или 3, только на 2.7.странное поведение с атрибутом в классе в python 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
Посмотрите внимательно * на трассе *. Это не трассировка, создаваемая кодом, который вы показываете. –
В вашей трассе есть строка 'print (WhatsName.DIST)'. Введенный вами код использует 'print (x.DIST)'. * Класс * не имеет такого атрибута, только * экземпляр * делает. –
Простите меня, но я не понимаю, где ошибка в моем коде. Почему печать (x.PLAT) и печать (x.DISTRIB) работают хорошо? Какая разница? И почему этот код хорошо работает с любой другой версией, кроме 2.7.5? –