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
原创粉丝点击