On Saturday, August 3, 2013 1:50:41 PM UTC+5:30, Steven D'Aprano wrote: > On Fri, 02 Aug 2013 23:18:47 -0700, punk.sagar wrote: > > > > > Hi All, > > > > > > Im new to Python. Im coming from C# background and want to learn Python. > > > I was used to do following thing in C# in my previous experiences. I > > > want to know how do I implement below example in Python. How these > > > things are done in Python. > > > > I am not an expert on C#, but I'll try to translate the following code to > > Python. > > > > > > > [code] > > > public class Bank > > > { > > > > > > public List<Customer> lstCustomers = new List<Customer>(); > > > private string micrcode; > > > > > > public void Bank() > > > { > > > customer > > > } > > > > > > } > > > > > > public class Customer > > > { > > > private srting customername; > > > public string CustomerName > > > > Do you mean "private string" rather than "private srting"? > > > > > > > { > > > get { return customername; } > > > set { customername = value; } > > > } > > > } > > > > > > main() > > > { > > > Customer objCustomer = new Customer; > > > objCustomer.CustomerName = "XYZ" > > > > > > Bank objBank = new Bank(); > > > objBank.lstCustomer.Add(objCustomer); > > > > > > } > > > [/code] > > > > > > Here is a literally translation, as best as I can understand the C# code. > > (But note that this is not the best Python code.) > > > > > > class Bank: > > def __init__(self): > > self.lstCustomers = [] # Empty list of customers. > > self._micrcode = '' # Does this actually get used? > > > > class Customer: > > def __init__(self): > > self._customername = '' > > > > @property > > def CustomerName(self): > > return self._customername > > > > @CustomerName.setter > > def CustomerName(self, value): > > if not instance(value, str): > > raise TypeError('names must be strings') > > self._customername = value > > > > > > if __name__ == '__main__': > > # Running as a script, call the main function. > > objCustomer = Customer() > > objCustomer.CustomerName = "XYZ" > > > > objBank = Bank() > > objBank.lstCustomers.append(objCustomer) > > > > > > > > But this isn't how I would write it in Python. For starters, our naming > > conventions are different. Everything in Python is an object, even simple > > types like ints and strings, and even classes, so it isn't meaningful to > > prefix instances with "obj". > > > > We tend to avoid anything which even vaguely looks like Hungarian > > Notation, so "lstCustomer" is right out. Instead, we use plural for > > collections (lists, sets, dicts, whatever) of things, and singular for > > individual instances. > > > > Also, while we can use the "property" decorator to make computed > > attributes, we very rarely do just to enforce private/public variables. > > Our philosophy is, if you want to shoot yourself in the foot, we're not > > going to stop you. (People spend far too much time trying to work around > > private names in other languages for Python to spend too much effort in > > this area.) Instead, we have "private by convention": names starting with > > a single underscore are "private", so don't touch them, and if you do, > > you have nobody but yourself to blame when you shoot yourself in the foot. > > > > Similarly, the language doesn't spend much time enforcing type > > restrictions. Python is a dynamic language, and type restrictions go > > against that philosophy. If you have a good reason to put a non-string as > > the customer name, you can do so, but don't come crying to me if you > > break your code. So here is how I would write the above: > > > > > > > > class Bank: > > def __init__(self): > > self.customers = [] > > self._micrcode = '' # Does this actually get used? > > > > class Customer: > > def __init__(self, name): > > # This type-check is optional. > > if not instance(name, str): > > raise TypeError('names must be strings') > > self.name = name > > > > > > if __name__ == '__main__': > > # Running as a script, call the main function. > > customer = Customer("XYX") > > > > bank = Bank() > > bank.customers.append(customer) > > > > > > The above is still not what I call professional quality -- no doc strings > > (documentation), and the bank doesn't actually do anything, but it's a > > start. > > > > > > -- > > Steven
Thanks Steven for your Time and Effort. You have cleared many doubts and concepts for that I was struggling, since I started learning python. But I am falling in love for Python. Your explanation for private and public access modifier was awesome as I was having harding time finding why we dont have access modifier for python....Thanks a lot -- http://mail.python.org/mailman/listinfo/python-list