050课作业问题,求助!
请帮我康康这段小代码,不知道为什么错了,哪位大佬看到我的代码后如果有任何建议都请写下来!写法,格式,不管是多小的建议都行,谢谢您们!class Const:
def __init__(self):
self.all_chang = {}
def __setattr__(self, name, value):
if check(name):
raise TypeError('常量无法改变!')
else:
self.all_chang.setdefault(name,value)
return __setattr__(name, value)
def check(self, string):
if self.string.isupper():
if string in all_chang:
return 1
else:
return 0
else:
raise TypeError('常量名必须由大写字母组成!')
import sys
sys.modules = Const()
底下是我的报错
Traceback (most recent call last):
File "E:/xiaojiayu/050 0.py", line 22, in <module>
sys.modules = Const()
File "E:/xiaojiayu/050 0.py", line 3, in __init__
self.all_chang = {}
File "E:/xiaojiayu/050 0.py", line 6, in __setattr__
if check(name):
NameError: name 'check' is not defined 本帖最后由 zltzlt 于 2020-7-18 18:57 编辑
应该是 self.check 不是 check,string 不是 self.string。试试这样:
class Const:
def __init__(self):
self.all_chang = {}
def __setattr__(self, name, value):
if self.check(name):
raise TypeError('常量无法改变!')
else:
self.all_chang.setdefault(name,value)
return __setattr__(name, value)
def check(self, string):
if string.isupper():
if string in all_chang:
return 1
else:
return 0
else:
raise TypeError('常量名必须由大写字母组成!')
import sys
sys.modules = Const()
zltzlt 发表于 2020-7-18 18:56
应该是 self.check 不是 check,string 不是 self.string。试试这样:
不行啊,运行后比刚才错误还多一个{:10_266:} 大地郡主 发表于 2020-7-18 19:06
不行啊,运行后比刚才错误还多一个
报的什么错呢? 大地郡主 发表于 2020-7-18 19:06
不行啊,运行后比刚才错误还多一个
这样行不行:
class Const:
def __init__(self):
self.all_chang = {}
def __setattr__(self, name, value):
if self.check(name):
raise TypeError('常量无法改变!')
else:
self.all_chang.setdefault(name, value)
return self.__setattr__(name, value)
def check(self, string):
if string.isupper():
if string in all_chang:
return 1
else:
return 0
else:
raise TypeError('常量名必须由大写字母组成!')
import sys
sys.modules = Const()
zltzlt 发表于 2020-7-18 19:07
这样行不行:
还是不行,报错是这个
Traceback (most recent call last):
File "E:/xiaojiayu/050 0.py", line 22, in <module>
sys.modules = Const()
File "E:/xiaojiayu/050 0.py", line 3, in __init__
self.all_chang = {}
File "E:/xiaojiayu/050 0.py", line 6, in __setattr__
if self.check(name):
File "E:/xiaojiayu/050 0.py", line 19, in check
raise TypeError('常量名必须由大写字母组成!')
TypeError: 常量名必须由大写字母组成! 大地郡主 发表于 2020-7-18 19:09
还是不行,报错是这个
Traceback (most recent call last):
File "E:/xiaojiayu/050 0.py", line 22, ...
代码改成这样:
class Const:
def __setattr__(self, name, value):
if self.check(name):
raise TypeError('常量无法改变!')
else:
return super().__setattr__(name, value)
def check(self, string):
if string.isupper():
if string in self.__dict__:
return 1
else:
return 0
else:
raise TypeError('常量名必须由大写字母组成!')
import sys
sys.modules = Const()
然后执行:
import const
const.NAME = "FishC"
print(const.NAME)
try:
# 尝试修改常量
const.NAME = "FishC.com"
except TypeError as Err:
print(Err)
try:
# 变量名需要大写
const.name = "FishC"
except TypeError as Err:
print(Err) 帮你修改好了:
class Const:
def __init__(self):
self.all_chang = {}
def __setattr__(self, name, value):
if name != 'all_chang' and self.check(name):
raise TypeError('常量无法改变!')
elif name == 'all_chang':
super().__setattr__(name, {})
else:
self.all_chang.setdefault(name, value)
super().__setattr__(name, value)
def check(self, string):
if string.isupper():
if string in self.all_chang:
return 1
else:
return 0
else:
raise TypeError('常量名必须由大写字母组成!')
import sys
sys.modules = Const() zltzlt 发表于 2020-7-18 19:40
帮你修改好了:
谢谢您!
页:
[1]