Python: What is the difference between G(F); a = 1; and G = F(1) -


class f(object):     # word 'object' meaningful?     def __init__(self,a,b,c):         self.a =         self.b = b         self.c = c class g(f):     # how subclass definition        = 1     b = 2     c = 3 h = f(1,2,3)    # differ one? 

in python2,

class f(object) 

declares f new-style class (as opposed classic class). in python3, classes new-style, object can omitted there.

certain python features, such properties , super, work new-style classes. new-style classes have attributes , methods, mro, classic classes lack.

classic classes present backwards compatibility. classes define should new-style classes.


class g(f):    

makes g subclass of f, whereas

h = f(1,2,3)  

makes h instance of f.

note pep8 style guide recommends classes named capwords, while instances given lowercase names. (so h should h...)


be sure aware of difference between class attributes , instance attributes. definition

class f(object):      def __init__(self,a,b,c):         self.a =         self.b = b         self.c = c 

gives instances of f instance attributes. assignments self.a = a, etc. executed when __init__ method called, happens when instance of f created. example, when say

h = f(1,2,3) 

notice these instance attributes can inspected in h.__dict__:

>>> h.__dict__ >>> {'a': 1, 'b': 2, 'c': 3} 

they not in f.__dict__.

>>> f.__dict__ >>> dict_proxy({'__dict__': <attribute '__dict__' of 'f' objects>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'f' objects>, '__doc__': none, '__init__': <function __init__ @ 0xae90ae4>}) 

keys in f.__dict__ class attributes. shared all instances of f. instance attributes specific each instance, , can differ between instances.

note since h instance of f, h can access f's class attributes own instance attributes. instance,

>>> h.__module__ >>> '__main__' 

that's basics, though there lot more said python attribute lookup rules. see chaturvedi more complete description of these rules.


now when say

class g(f):          = 1     b = 2     c = 3 

you defining a, b , c class attributes of g. notice these class attributes can inspected in g.__dict__:

>>> g.__dict__ >>> dict_proxy({'a': 1, '__module__': '__main__', 'b': 2, 'c': 3, '__doc__': none}) 

Comments

Popular posts from this blog

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -

javascript - firefox memory leak -

Trying to import CSV file to a SQL Server database using asp.net and c# - can't find what I'm missing -