检查参数类型的 Pythonic 方法

标签 python class exception parameter-passing

我正在做一个小的副业项目,并制作了一些类和方法。其中一个类代表我们库存中的一个货架,另一个代表货架上的每个箱子。我有一个方法可以将一个新的垃圾箱添加到货架上,我添加了一些逻辑以确保它在添加到货架之前传递了一个 Location 对象(现在我在开发时使用列表,然后将所有内容移动到数据库).

然而,我刚刚在一本 Python 书中读到,在异常出现时对其进行处理通常比添加额外的代码更好。我删除了逻辑以查看我会得到什么错误,但我没有得到任何允许字符串代替 Location 对象的东西。

是否有更 Pythonic 的方式来强制参数是什么类型?

我的货架上有什么:

class CrossDock:
locations = []

def add_location(self, location):
    if isinstance(location, Location): #if this is commented out it will take what ever is passed to it
        self.locations.append(location)
    else:
        print("location parameter must be of type: Location. Parameter is of type" + str(type(location)))

有没有办法用 try/except block 来做到这一点?

最佳答案

向调用者传播异常。这会强制您的类的用户在 滥用类时修复无效类型。打印没有用,因为它不强制执行接口(interface)契约(Contract)。

class CrossDock(object):
    def __init__(self):
        self.locations = []

    def add_location(self, location):
        if isinstance(location, Location):
            self.locations.append(location)
        else:
            raise TypeError("location must be Location, got: " +
                            repr(type(location)))

关于检查参数类型的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20673087/

相关文章:

python - 使用 Flask-WTForms,如何设置 html 表单部分的样式?

java - 类图和管理员权限

C# 正确的程序结构

python - NumPy 中 'any' 的困难

c# - 是否可以从 Python 调用 Entity Framework 数据访问程序集?

python - 使用 Pandas 在 MySQL 中创建一个临时表

javascript - 如何向 Javascript ES6 中的类添加方法

java - 是否应该在 throws 子句中声明 IllegalArgumentException?

java - 为什么我会收到此异常错误?

java - 输入不匹配异常是什么意思?