Python: 删除一个 class 实例

Python: Deleting a class instance

我是 Python 的新手,并尝试在我的学习课程中编写一些额外的代码,所以现在我需要编写一个 class 来创建一个多维数据集,而不是两个方法。这些方法不是问题,但我想在创建我的多维数据集时生成失败保存。

当您使用 int 或 float 以外的任何其他类型创建多维数据集时,它应该 return 那是无效的并删除创建的实例。我用谷歌搜索,尝试过但无法弄清楚如何完成它。

我还想在失败保存文本中生成实例名称。所以它说“[...]实例“a”将被删除[...]”当我创建时:

a = Cube("not an int or float")

并且:“[...]实例“b”将在我尝试创建时被删除[...]”:

b = Cube("not an int or float")

代码:

class Cube():
    def __init__(self, length):
        if type(length) == int or type(length) == float:
            self.length = length
        else:
            print("The type of length has to be int or float.\nThe instance (a) will be deleted!!")
            del self
        
    def surface(self):
        print("surface")
    
    def volume(self):
        print("volume")
        

# creating an instance of the cube-class 
a = Cube("not an int or float")

# and test the methods
a.surface()
a.volume()

如果初始化有问题,只需引发异常。该异常将阻止分配发生,这意味着该对象将立即进行垃圾收集,因此您不需要使用 del (无论如何都没有实际效果; del 只是递减通过删除 name 对象的引用计数,但是名称 self 无论如何都会超出范围,效果相同)。

使用isinstance检查参数类型。

class Cube:
    def __init__(self, length):
        if not isinstance(length, (int, float)):
            raise TypeError("Length must be an int or a float")

        self.length = length

    ...

不过,理想情况下,您将提供正确类型的负担留给调用者。您可以使用类型提示让用户更容易捕捉到此类错误:

from typing import Union


class Cube:
    def __init__(self, length: Union[int, float]):
        self.length = length

    ...

mypy 这样的工具可以用来静态检查 没有尝试传递不同类型的参数。