[Tutor] Concept related to python classes

Manprit Singh manpritsinghece at gmail.com
Mon Sep 7 12:15:25 EDT 2020


Dear Sir,
This is again a continuation mail . I have tried to solve the same problem
of finding area of a triangle using decorators . and it seems more
effective in comparison to my previous code, which is given below :

class Triangle:
    def __init__(self):
        self._a = None
        self._b = None
        self._c = None
        self._area = None

    @property
    def a(self):
        """I'm the 'a' property."""
        return self._a

    @a.setter
    def a(self, a1):
        self._a = a1

    @property
    def b(self):
        """I'm the 'b' property."""
        return self._b

    @b.setter
    def b(self, b1):
        self._b = b1

    @property
    def c(self):
        """I'm the 'c' property."""
        return self._c

    @c.setter
    def c(self, c1):
        self._c = c1


    def calcarea(self):
        s = (self._a + self._b + self._c) / 2
        self._area =  (s * (s - self._a) * (s - self._b) * (s -
self._c))**0.5

    @property
    def area(self):
        self.calcarea()
        return self._area



tri = Triangle()
tri.a = 3
tri.b = 4
tri.c = 5
print("Area of triangle with
sides",tri.a,"&",tri.b,"&",tri.c,"is",tri.area)
tri.a = 4
tri.b = 4
tri.c = 3
print("Area of triangle with
sides",tri.a,"&",tri.b,"&",tri.c,"is",tri.area)

Output is as follows:

Area of triangle with sides 3 & 4 & 5 is 6.0
Area of triangle with sides 4 & 4 & 3 is 5.562148865321747

Just see, after making the object of the class Triangle and assigning it to
a variable tri , i am just going in an easy way similar to assigning values
to the instance variables, although here in this example , by writing
tri.a, tri.b & tri.c for setting, the setter function  for a particular
instance variable is accessed due to property.
and immediately after it , writing tri.area gives the area This seems more
pythonic.

What about adopting this practise ?

Regards
Manprit Singh


On Mon, Sep 7, 2020 at 6:09 PM Alan Gauld via Tutor <tutor at python.org>
wrote:

> On 07/09/2020 10:59, Manprit Singh wrote:
>
> > class Triangle:
> >     def __init__(self, a, b, c):
> >         self.a = a
> >         self.b = b
> >         self.c = c
> >
> >     def area(self):
> >         s = (self.a + self.b + self.c) / 2
> >         return (s * (s - self.a) * (s - self.b) * (s - self.c))**0.5
> >
> >     def resize(self, a1, b1, c1):
> >         self.a = a1
> >         self.b = b1
> >         self.c = c1
>
>
> Yes, that looks more like what I'd expect to see.
>
> BTW Thanks for posting the area equation, I'd never come across
> Herons formula before and had to do some reading on Wikipedia :-)
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> http://www.amazon.com/author/alan_gauld
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list