Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to change default discount in python using classes and inheriance?

I was trying to change the discount rate of a particular sub class, while the default is set at 0, and in subclass it changes to 5, however, this is not refelected.

I cannot switch the discount scheme on Class B, because all class need to have access on it.

class A:
    def __init__(self, x, y, discount=0):
        self.discount=0
        if self.discount>0:
            discount = self.discount
        else:
            discount=0
        self.discount=discount
        self.x=x
        self.y=y
        self.discount=discount
        discount=5
class B(A):
    def __init__ (self,x,y,z):
        super().__init__(x,y)
        B.z=z
        B.discount=5
        
class C(A):
    def __init__ (self,x,y,a):
        super().__init__(x,y) 
        C.a=a
        C.discount = 10
        a = y*10

one=A(1,2)
print(one.x)
print(one.discount)
two = B(1,2,3)
print(two.x)
print(two.z)
print(two.discount)
three = C(4,5,6)
print(three.x)
print(three.discount)

Output:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

1
0
1
3
0
4
0

Tried to do some calculations and integrate methods, but it only works for methoid but not on the class, as you can see, the discount is set to 0 and doesn’t change.

>Solution :

The constructor of your A class seems quite confusing. If the only thing you need is to check if the discount parameter is greater than 0 and set it to your instance’s discount variable, you can simplify your code like this:

class A:
    def __init__(self, x, y, discount=0):
        self.discount=0
        if discount>0:
            self.discount = discount
        self.x=x
        self.y=y

Moreover, when you try to modify an instance variable in a subclass, you can still use self:

class B(A):
    def __init__ (self,x,y,z):
        super().__init__(x,y)
        self.z=z
        self.discount=5
        
class C(A):
    def __init__ (self,x,y,a):
        super().__init__(x,y) 
        self.a=a
        self.discount = 10
        a = y*10

Running the commands again, you ‘ll get:

1
0
1
3
5
4
10

You can find more about instance and class variables here and inheritance here.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading