如何解决Python:限制参数的值
这里如何将sex参数的值限制为男性或女性?
class SoftwareEngineer:
def __init__(self,name,age,sex,level,salary):
sexes=['male','female']
if sex in sexes:
self.sex=sex.lower()
self.name=name
self.age=age
self.level=level
self.salary=salary
第二次尝试:
class SoftwareEngineer:
def __init__(self,sex=['male','female'],'female']
if sex in sexes:
self.sex=sex.lower()
self.name=name
self.age=age
self.level=level
self.salary=salary
解决方法
最简单的方法是在创建 SoftwareEngineer
对象之前验证参数 - 在调用 __init__
时,对象已经创建。但是,如果您想在初始化程序中进行参数验证,那么您可以执行类似于下面的代码的操作,将其踢回周围的代码进行处理。
示例:
class SoftwareEngineer:
def __init__(self,name,age,sex,level,salary):
self._validate_sex(sex)
self.sex = sex.lower()
self.name=name
self.age=age
self.level=level
self.salary=salary
def _validate_sex(self,sex):
if sex.lower() not in ["male","female"]:
raise ValueError(f"Person's sex must specified as male or female not {sex}.")
parameters_validated = False
while not parameters_validated:
# Other parameter inputs not shown for simplicity
sex = input("Please enter sex of person [male,female]: ")
try:
swe = SoftwareEngineer("Fiona",25,6,12000)
except ValueError as exc:
print(exc)
print("Please try again.")
else:
print("All good,thanks.")
parameters_validated = True
,
传统上,您会通过引发 ValueError 来强制执行此操作,其定义为:
当操作或函数接收到类型正确但值不合适的参数时引发,并且这种情况没有用更精确的异常(例如 IndexError)来描述。
class SoftwareEngineer:
def __init__(self,salary):
sexes={'male','female'}
sex = sex.lower()
if sex in sexes:
self.sex = sex
else:
raise ValueError(“sex must be ‘male’ or ‘female’.”)
(旁注:我的一些软件工程师朋友会对这种随意的区分感到非常恼火。如果您必须为家庭作业这样做,那就这样吧。如果您是真的这样做,请考虑只存储任何内容值被传入。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。