Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deleting certain instances of a class attribute

Tags:

python

I am working with classes in Python for the first time and I need to loop through my class attributes and delete certain instances under certain conditions. The problem is that I cannot find any examples of deleting instances of certain attributes. To be a little more specific, my class is phone_bills and one of my attributes is minutes_used and the instance would be minutes used of a specific month. Well, sometimes I need to delete that one month or one instance.

I am starting to wonder if working with classes is wrong for this particular project.

Here is some of my code (where i make the class and then at the bottom where i try to deltete an instance.

class MeterBill:

'components of MeterBill'
def __init__(self,IDC,Name,StartD,End_D,Mdays,Cons):   #Name,StartD,End_D,Mdays,Cons):
      self.IDC = IDC       #idc
      self.Name= Name      #name
      self.StartD = StartD #startd
      self.End_D = End_D   #end_d
      self.Mdays = Mdays   #modays
      self.Cons = Cons    #cons

def __repr__(self):
      return repr((self.IDC,self.Name,self.StartD,self.End_D,self.Mdays,self.Cons))

  #there is some other code here to read in the data then

    e=len(bills); startlen=e;s=0
    row=0; daysthresh=38; count=0
    while count < startlen:
         for row in range(s,e):
            count = 1+ count
                                                                                       if bills[row-1].Mdays < daysthresh and bills[row-1].IDC==bills[row].IDC:    
           print bills[row-1],#row-1,meter[row-1]
           bills[row].Mdays = bills[row-1].Mdays+bills[row].Mdays
           bills[row].Cons  = bills[row-1].Cons+bills[row].Cons
           bills[row].StartD=bills[row-1].StartD
           #del mybills.minutes_used
           #bills=MeterBill()
           del bills[row-1].Cons

the last 3 lines is me trying to delte an instance of my class at row-1 (using code from Peter Downs post). I want to delete this one line. I want to delete 1 single instance of each attribute that i defined. so if I could get that del bill[row-1].cons to work then i would do it for all the other attributes at row-1.
Note you have to scroll to the right ot see my if statement.

like image 831
user1087809 Avatar asked Jan 22 '26 01:01

user1087809


2 Answers

I am starting to wonder if working with classes is wrong for this particular project.

No, certainly not, no worries :)


Lets say we have the following class:

class PhoneBills(object):
    def __init__(self, minutes_used):
        self.minutes_used = minutes_used

Then you can delete the attribute minutes_used simply by:

mybills = PhoneBills()
del mybills.minutes_used

Which would remove the attribute from your object mybills. All lookups would result in an exception. I'm not sure that this is what you want. Probably just setting minutes_used to 0 or None would be a better approach?

like image 161
Constantinius Avatar answered Jan 27 '26 01:01

Constantinius


Using an object in this case isn't a bad idea, as others have pointed out. However, you have to think about the problem just a little bit differently in order to get the best use of these objects.


If you have a phone_bills object, then we assume its only responsibility is to manage a phone bill. It could be for a single month, it could be for an entire year - there's enough context in the object name that it could do both.

If it's managing a month-to-month bill, then what's required is, at the end of every month, the minutes used is recalculated, meaning that the value for the used minutes at this current point is reset, not deleted.

Now, unless your assignment specifically calls for you to delete the end-of-month total, then you're best served with resetting the value. The way to do this with Python objects is simple:

phone_bills.minutes_used = 0
like image 27
Makoto Avatar answered Jan 27 '26 01:01

Makoto