有哪些方法可以为类中的参数实现条件条目?
这是我的意思的一个例子,请参加以下类(class):
class Person(object):
def __init__(self, name, gender, age):
self.name = name
self.gender = gender
self.age = age
def get_name(self):
return self.name
def get_gender(self):
return self.gender
def get_age(self):
return self.age
在上述情况下,仅当 name、gender 和 age 的参数分别为
str
、 str
和 int
类型时,我才希望从 Person 类创建一个对象。换句话说,如果我输入:
bill = person('Bill McFoo', 'Male', '20')
对象
bill
不会被创建,因为年龄是一个字符串而不是一个整数。这是我的方法;我在
if
方法中包含了一个 __init__
语句:def __init__(self, name, gender, age):
self.name = name
if isinstance(age, str):
print("Age needs to be an integer you f**king idiot!")
raise ValueError
else:
self.age = age
self.gender = gender
所以在上面的例子中,参数
age
的输入被检查它是一个整数,如果不是,那么它会斥责用户并引发一个阻止对象被创建的异常。我可以对 name
和 gender
执行相同的操作,并使用 isinstance
检查它们是否是字符串。所以我想知道是否有更简单或“正确”的方法来为类实现这样的参数检查,而不是我所做的方法?
最佳答案
正确的方法是根本不检查任何东西。在 Python 中,您假设对象知道当您向它们询问事物时该做什么,然后在出现问题时捕获异常。
如果您 必须 那么您尝试将对象转换为您期望的类型,然后捕获异常:
try:
age = int(age)
except ValueError:
# do something
raise
或者很简单,如果您只是要重新引发异常 - 您不需要捕获它:
self.age = int(age)
现在,如果
age
不是可以转换为整数的东西,并且由于您没有异常处理程序,Python 将引发异常 - 默认异常处理程序将捕获异常并停止程序的执行。这种范式称为 EAFP :
此外,您不需要 Python 中的“getter/setter”方法。所以你可以摆脱
get_name
等,直接访问属性。关于python - 类中参数的条件或限制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33194412/