python_面向对象
来源:互联网 发布:神速百度快速排名优化 编辑:程序博客网 时间:2024/06/12 22:39
OO的特征:面向对象
1.封装
2.继承
3.多态
OOA:面向对象分析
OOP:面向对象编程
OOD:面向对象设计
==============================================
#封装:#类class Turtle: #属性 color = 'green' weight = 10 legs = 4 shell = True mouth = "大嘴" #方法 def climb(self): print("我正在很努 力的向前爬") def run(self): print("我正在飞快的向前跑") def bite(self): print("咬死你!")#创建对象 tt = Turtle()tt.bite()
#继承 : 这个类继承list,并拥有List的所有方法class Mylist(list): passlist2 = Mylist()list2.append(range(10))print list2
如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性
class Parend(): def hello(self): print("正在调用父类的方法……")class Child(Parend): def hello(self): print("正 在调用子类的方法……")c = Child();c.hello()正 在调用子类的方法……
class Fish: def __init__(self): self.x = r.randint(0,10) self.y = r.randint(0,10) #每移动一次就向 西移动一个位置 def move(self): self.x -=1 print("我的位置是",self.x,self.y)class Goldfish(Fish): passclass Carp(Fish): passclass Salmon(Fish): pass#乌龟class Shark(Fish): #这里的名子和父类一样,这时就覆写父类,当调用继承下来的move()方法,调用方法时,就会报错,因为没有初始化父类的 #所以要初始化一下父类的 def __init__(self): super().__init__() self.hungry = True def eat(self): if self.hungry: print("吃货的梦想就是天天吃") self.hungry = False else: print("吃不了了")shark = Shark()shark.move()
多重继承:
class Basel: def fool(self): print("我是foo1,我为Basel代言")class Base2: def foo2(self): print("我是foo2,我为Base2代言")class C(Basel,Base2): passc = C()c.foo2()c.fool()我是foo2,我为Base2代言我是foo1,我为Basel代言
#多态 :调用的函数名子一样,但实现方法内容却不一样class A: def fun(self): print("我是A")class B: def fun(self): print("我是B")a = A()b = B()a.fun()b.fun()
self:就是实例化的对象,相当于this
class Ball: def setName(self,name): self.name = name def kick(self): print("我叫%s,谁踢我……"%self.name)a = Ball()a.setName("张")a.kick()我叫张,谁踢我……b = Ball()b.setName("李")b.kick()我叫李,谁踢我……
init(self): 构造方法,实例对象时会自动传入参数,进行初始化
class Ball: def __init__(self,name): self.name = name def kick(self): print("我叫%s,谁踢我……"%self.name)a = Ball("张")a.kick()b = Ball("李")b.kick()
公有和私有
私有:只需要在变量名或函数名前加上__两个下划线,那么这个函数或变量就会变为私有的了
class Person: __name = "张" def getName(self,name): self.__name = name return self.__namep = Person()#通过公有方法更改私有属性print p.getName("李")#通过对象引用访问私有属性 ,其它是未私有的,可以通过其它方式来访问它print p._Person__name
组合:就是将实例 化后的类放入新类的初始化中,这样,这些类就组合在一起了,不是很有继承关系的就可以用组合
class Turtle: def __init__(self,x): self.num = xclass Fish: def __init__(self,x): self.num = xclass Pool: def __init__(self,x,y): self.turtle = Turtle(x) self.fish = Fish(y) def print_num(self): print("水池里总共有乌龟%d 只,小鱼 %d 条"%(self.turtle.num,self.fish.num))pool = Pool(1,10)pool.print_num()
一些相关的BIF(对象内置函数)
#一个类是否是另一个类的子类 ,classinfo:可以是一个元组,也就是多个issubclass(class,classinfo)#一个类是否是另一个类的实例isinstance(object,classinfo)#对象中是否有这个属性hasttr(objcet,name)#返回对象中指定的属性值,没有,则返回自定义的值getattr(object,name,[default])#设置对象中指定的属性值,没有,则新创建一个新的属性setattr(object,name,value)#删除对象中指定的属性delattr(object,name)#设置一个属性,设置已级定义好的属性传入的都是定义好的方法名property(fget=None,fset=None,fdel=None,doc=None)>>> class C: def __init__(self,size=10): self.size = size def getSize(self): return self.size def setSize(self,value): self.size = value def delSize(self): del self.size x = property(getSize,setSize,delSize)通过 定义的x 间接的获取属性>>> >>> c1 = C()>>> c1.getSize()10>>> c1.x #相当于调用了定义的get方法10>>> c1.x = 18 #相当于调用了定义的set方法>>> c1.x18>>> c1.size18>>> c1.getSize()18>>> del c1.x>>> c1.sizeTraceback (most recent call last): File "<pyshell#10>", line 1, in <module> c1.sizeAttributeError: 'C' object has no attribute 'size'
0 0
- python_面向对象
- Python_面向对象编程
- python_面向对象三
- Python_面向对象编程基础
- python_面向对象(一)
- python_面向对象(初始)
- python_面向对象(二)
- 【20171014】python_语言设计(8)面向对象程序设计
- python_类型和对象
- python_类型和对象
- python_对象整理
- 【20171011】python_语言设计(6)程序设计方法与面向对象程序设计
- python_通过shelve修改对象
- python_
- Python_序列对象内置方法详解_String
- 【20171014】python_语言设计(7)面向过程程序设计
- 面向对象
- 面向对象
- 映射公网(花生壳、PubYun、No-IP、DynDNS、Ngrok、Tunnel、localtunnel、pagekite)
- C++中派生类的访问控制
- NSLog打印格式控制
- 数据结构学习笔记 C++版 (一)
- RAGE的megatexture介绍
- python_面向对象
- log4j的配置
- 让mysql数据库允许被远程连接访问
- 欢迎使用CSDN-markdown编辑器
- js javascript:void(0) 真正含义
- A TextureView or a subclass can only be used with hardware acceleration enabled.错误原因分析
- 重写equals方法也要重写hashCode
- iOS开发常用宏定义
- ubantu14.04上安装搜狗输入法出现乱码问题