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
这样的工具可以用来静态检查 没有尝试传递不同类型的参数。
我是 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
这样的工具可以用来静态检查 没有尝试传递不同类型的参数。