Ned Batchelder wrote:
On 9/30/17 7:18 PM, Bill wrote:
Ned Batchelder wrote:
On 9/30/17 5:47 PM, Bill wrote:
I spent a few hours experimenting with @property. To my mind it seems like it would be preferable to just define (override) instance methods __get__(), __set__(), and possibly __del__(), as desired, as I could easily provide them with "ideal" customization. Am I overlooking something?


It would be easier to comment if you showed the two options. One with @property, and one with __get__ etc.

A downside to __get__ is that you need to create a class with those methods, and then instantiate that class as an attribute in your real class, whereas @property can be used without a lot of rigamarole.

--Ned.

I am basically mimmicking what I see at (the very bottom of) this page:

https://www.programiz.com/python-programming/property

Can you show us the code you are using it to mimic that?

--Ned.

Here it is, Ned. It's my first attempt at using classes in Python.
I still have to learn how to incorporate datetime appropriately!  :)

import datetime


# object oriented example class Employee(object):
''' This class will abstract an employee. Class date members name, a string birthday, a date object address, a string position It also has a static data member for the number of employees. ''' num_employees =0 # class data item @classmethod def get_num_employees(cls):
        return Employee.num_employees

    def __init__(self, name, birthdate, address, position):
        Employee.num_employees +=1 self.name = name
        self.birthdate = birthdate
        self.address = address
        self.position = position

    @property def address(self):
        print("**Hi from address-getter**")
        return self._address

    @address.setter def address(self, value):
        print("*****Hi, from address setter()!")
        self._address = value

def __del__(self):
        print("******* Hi, from __del__()")
        ##Employee.num_employees -= 1 def __str__(self):
        return 'Name: {}, Born: {} \nAddress: {} \nPosition: {} \n'.\
                format(self.name,self.birthdate,self.address,self.position)

class SalesPerson(Employee):
    def __init__(self, name, bdate, addr):
        super().__init__(name, bdate, addr,"Salesperson")


def main():
        emp1 = Employee("Sam","4/30/1970","212 Elm","Programmer")
        emp2 = SalesPerson("Gene","5/1/79","414 Maple")
        ## Note: learn to use datetime.date--> str print(emp1)
        print(emp2)
        emp1.address ="230 Main Street" # call setter? print(emp1)
        del(emp1)
        print("Number of employees", Employee.get_num_employees())


print('*'*30)
main()#call main()

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to