【发布时间】:2023-03-30 08:49:01
【问题描述】:
我有以下问题,我是 Python 脚本的业余用户。我创建了以下类
roof_height = 3.5 #m
E = 30000*(10^3) #kN/m^2
class Brace():
_registry = []
def __init__(self,name,coord,b,d, h = roof_height):
print('Brace created.')
Brace._registry.append(self)
self.name = name
self.coord = coord # pass tuple in the form of (x,y)
self.b = b # //x global
self.d = d # //y global
self.h = h
def __del__(self):
print('Destructor called, Brace deleted.')
Brace._registry.remove(self)
def properties(self):
print("properties of " + self.name + " calculated")
As = self.b*self.d
Iy = self.b*(self.d**3)*(1/12)
Iz = (self.b**3)*(self.d)*(1/12)
self.Iy = Iy
self.Iz = Iz
self.As = As
def stiffness(self):
print("stiffnesses of " + self.name + " calculated")
Kx = 12*E*self.Iy/self.h
Ky = 12*E*self.Iz/self.h
self.Kx = Kx
self.Ky = Ky
我已经创建了类的 _registry 通用属性,这样我就可以遍历对象,效果很好。我面临的问题如下: 1.当我创建一个对象时打印出来
'Brace created'
显示,但是当我删除它时,消息
'Destructor called, Brace deleted.'
在删除对象时不显示,_registry 列表也保持不变而不删除对象。列表的长度显然保持不变。
- 如何避免使用相同名称创建两次相同的实例,我的意思是如何检查重复的实例(相同的对象名称和属性值) 我是否必须为其编写代码,或者是否有可以使用的内置函数?
【问题讨论】:
-
“当我删除它时” - 你如何删除实例?你能把这段代码包含进去吗?
-
我有点不清楚你希望
remove()做什么。您是否希望它从列表中删除self(在本例中为Brace对象)并从内存中删除该对象,或者您是否希望它只需将其从列表中删除? -
检查stackoverflow.com/questions/35488705/… 并考虑创建上下文管理器所需的方法。
-
@asongtoruin 例如
brace1 = Brace('K1',(3,2),0.5,1.5)用于创建对象,del brace1用于删除它。 @ResetACK 是的,我想删除该对象并将其从列表中删除。 @cdarke 谢谢会做。 -
__del__可能不是你想象的那样——它是由垃圾收集器调用的
标签: python python-3.x class object instance