类基础

来源:互联网 发布:彩票代购源码 编辑:程序博客网 时间:2024/06/16 08:06

一、类基础:

```#-*-coding:utf-8-*-'''Created on 2015年7月4日@author: Zroad'''class FirstClass(object):    def setdata(self,value):        self.data = value    def showdata(self):        print self.data"""1、创建实例后,就存在实例的命名空间和类的命名空间x.data/y.dataFirstClass.setdata,FirstClass.showdata2、实例的命名空间可以读取类的命名空间3、创建实例时不一定需要对实例的属性进行赋值"""x = FirstClass()y = FirstClass()x.setdata("Hello,World!")y.setdata(110)x.showdata()y.showdata()"""在类外也可以通过实例对属性进行赋值(__init__方法定义的必须),甚至可以通过实例创建新的属性,比较少见不建议用"""x.data = "Hello,Zroad!"x.otherdata = "你好!~"x.showdata()print "x.otherdata=",x.otherdata#print "y.otherdata=",y.otherdataprint dir(x)"""类继承超类的属性,实例->类->超类搜索,深度优先,通过继承实现类的定制(通过方法的重载=覆盖实现)"""class SecondClass(FirstClass):    def showdata(self):        print "Current value=%s"  % self.data #data属性继承自FirstClassz = SecondClass()z.setdata("Hello,Hlf")z.showdata()"""实现运算符的重载,__init__,__add__,__str__重载后是对类对象生效,还是对实例对象生效?"""class ThirdClass(SecondClass):    def __init__(self,value):        self.data = value    def __add__(self,other):        return ThirdClass(self.data+other)    def __str__(self):        return '[ThirdClass:%s]' % self.data    def mul(self,other):        self.data *= othera = ThirdClass("abc") #创建实例对象时调用__init__方法a.showdata()print a #调用 ThirdClass.__str__b = a + 'xyz' #调用ThirdClass.__add__,返回值为b的值b.showdata()print bb.setdata("123xyz")  #继承自FirstClassprint b"""类的属性与实例的属性"""class rec(object):    passrec.name = "bob"rec.age = 40b = rec()c = rec()print b.name,b.age  #直接继承类的属性print c.name,c.ageb.name = 'criam' #定义了实例对象b自己的属性name,ageb.age = 50"""b.name=criam,b.age=50c.name=bob,c.age=40rec.name=bob,rec.age=40结论:修改实例的属性不会改变类的属性值,参考实例、类的继承规则就可以明白"""print "b.name=%s,b.age=%d" % (b.name,b.age)print "c.name=%s,c.age=%d" % (c.name,c.age)print "rec.name=%s,rec.age=%d" % (rec.name,rec.age)"""类的__dict__,__class__,__base__属性"""print rec.__dict__.keys()print list(b.__dict__.keys())print list(c.__dict__.keys())"""__dict__属性记录了当前对象(类或实例)所拥有的属性,不包括继承的['__module__', 'name', 'age', '__dict__', '__weakref__', '__doc__']['age', 'name'][]""""""__class__属性记录了实例所连接到的那个类<class '__main__.rec'><class '__main__.rec'>"""print b.__class__  print c.__class__"""__base__返回类的其超类的元组,实例无该属性<class '__main__.SecondClass'>  =只返回最近的以成继承关系的类"""print ThirdClass.__base__"""独立于类之外的方法,"""def upperName(self):    return self.name.upper()print upperName(b)print upperName(c)"""通过类绑定相关的方法,实例继承该方法"""rec.method = upperName #方法绑定?print b.method()print c.method()

二、类中关于深度优先与广度优先
这里写图片描述

0 0
原创粉丝点击