类基础
来源:互联网 发布:彩票代购源码 编辑:程序博客网 时间: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
- 类基础
- 类基础
- 类基础
- 类:基础
- 类:基础
- 类 基础
- 基础类
- J2SE基础:1.类和对象基础
- python基础学习九:类基础
- xml类的基础
- 类基础—困惑
- SQL连接基础类
- java数据库基础类
- Java类基础结构
- 数据访问基础类
- C++基础--抽象类
- MFC(微软基础类)
- action 基础类
- Redis字符串类型操作
- 不带头结点的单链表的基本操作
- 自定义UISearchBar背景、边框、左侧图标、删除图标、取消按钮
- 96.Unique Binary Search Trees
- Android ActionBar 自定义布局
- 类基础
- 【POJ 1905】 Expanding Rods (二分)
- vc中调用Com组件的方法详解
- 快速排序算法
- 黑马程序员——Java工具类概述
- 欢迎使用CSDN-markdown编辑器
- 【ugui的坑】实现可拖拽的Sprite
- MySQL事务处理介绍
- php中的转义字符