Dear StackOverflow community. I have a problem in Python. I created a very basic class named Customer with basic methods to simulate real-life customers. However, I encountered an issue. I defined a class method called remove_customer, and I used the *del *keyword inside it. But I observed that my function does not remove the object belonging to the Customer class. I tried taking out the del keyword and putting outside of class , and I noticed that these two approaches yielded different results. I can’t figure out why this happened. Can someone clarify the situation I encountered?
note:
I have consulted my teacher but he replied me it is a bad practice using OOP and del like this way.
class Customer():
customer_list=[]
__slots__=["name","age","gender"]
def __init__(self,name:str,age:int,gender:int):
self.name=name
self.age=age
self.gender=gender
Customer.add_customer(self)
def get_name(self):
return self.name
def get_age(self):
return self.age
def get_gender(self):
return self.gender
@classmethod
def add_customer(cls,customer):
cls.customer_list.append(customer)
if __name__=="__main__":
customer1=Customer("Jack",28,1)
customer2=Customer("Julia",27,0)
for x in Customer.customer_list:
print(x.name)
Customer.customer_list.remove(customer1)
del customer1
print(customer1)
class Customer():
customer_list=[]
__slots__=["name","age","gender"]
def __init__(self,name:str,age:int,gender:int):
self.name=name
self.age=age
self.gender=gender
Customer.add_customer(self)
def get_name(self):
return self.name
def get_age(self):
return self.age
def get_gender(self):
return self.gender
@classmethod
def add_customer(cls,customer):
cls.customer_list.append(customer)
@classmethod
def remove_customer(cls,customer):
cls.customer_list.remove(customer)
del customer
if __name__=="__main__":
customer1=Customer("Jack",28,1)
customer2=Customer("Julia",27,0)
for x in Customer.customer_list:
print(x.name)
Customer.remove_customer(customer1)
print(customer1)
first one yields output :
NameError: name ‘customer1’ is not defined. Did you mean: ‘customer2’?
But second one yields different output even doing same thing (I only modified place of del) :
Jack
Julia
<main.Customer object at 0x0000026DD3D76D00>
GaussianIntuition is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
2