美文网首页
鱼C-python之 类& 对象

鱼C-python之 类& 对象

作者: 飞翼_U | 来源:发表于2017-03-21 16:53 被阅读0次

    对象 = 属性 + 方法
    一个关于类的简单例子:

    class Turtle: #python中的类名约定以大写字母开头
        #属性
        color = 'green'
        weight = 10
        legs = 4
        shell = True
        amouth = '大嘴'
    
      #方法:
        def climb(self):
            print("我正努力的向前爬....")
        def run(self):
            print("我正飞快的向前跑....")
        def bite(self):
            print("咬死你咬死你!!")
        def eat(self):
            print("有吃的,好开心")
        def sleep(self):
            print("睡觉吧,Zzzz")
    

    运行后调用结果如下:

    ======================= RESTART: D:/Python35/c/lei.py =======================
    >>> tt = Turtle()
    >>> tt.climb()
    我正努力的向前爬....
    >>> tt.run()
    我正飞快的向前跑....
    >>> tt.bite()
    咬死你咬死你!!
    >>> 
    

    面向对象的三个特征:
    1)封装:就是属性和方法放在一起,也是一种信息隐蔽技术,因为调用的时候只是告诉方法的名字,不关系方法里面具体是如何实现的。
    比如下面的sort()方法只是知道它有排序的作用,就调用它实现排序,但是里面具体怎么实现的我们并不清楚:

    >>> list = [1,5,3,6,8]
    >>> list.sort()
    >>> list
    [1, 3, 5, 6, 8]
    >>> 
    

    2)继承:即子类自动共享父类之间的数据和方法

    >>> 
    >>> class Parent:
        def hello(self):
            print("正在调用父类的方法")
    
            
    >>> class Child(Parent):
        pass
    
    >>> p = Parent()
    >>> p.hello()
    正在调用父类的方法
    >>> c = Child()
    >>> c.hello()
    正在调用父类的方法
    

    3)多态:即不同对象对同一方法返回值不通
    例子,

    >>> 
    >>> class A:
        def fun(self):
            print("我是小A")
    >>> class B:
        def fun(self):
            print("我是小B")
    >>> a = A()
    >>> a.fun()
    我是小A
    >>> b = B()
    >>> b.fun()
    我是小B
    
    
    

    类 是图纸, 根据 类实例化后的对象才是房子,就像上面的例子,A是类(图纸),a是实例化后的对象(房子)

    self 是什么

    解释:和c里面的 this差不多,代表调用自身。
    例子:

    >>> class Ball:
        def setName(self,name):
            self.name = name
        def tick(self):
            print("我是%s,该死的谁踢我" % self.name)
            
    >>> a = Ball()
    >>> a.setName('篮球')
    >>> 
    >>> c = Ball()
    >>> c.setName('土豆')
    >>> a.tick()
    我是篮球,该死的谁踢我
    >>> c.tick()
    我是土豆,该死的谁踢我
    >>> 
    
    

    上面之所以A是篮球,C是土豆,就是因为 self去寻找各自的参数的。
    我们只要记住 类 定义的时候把 self 写入第一个参数就好了。

    特殊参数
    __init__  #注意这里是2个下划线哦,作用是在定义参数的时候传入参数,也java里面的构造函数差不多
    
    >>> 
    >>> class Ball:
        def __init__(self,name):
            self.name = name
        def tick(self):
            print("我是%s,该死的谁踢我" % self.name)
    
    >>> b = Ball('哈哈')
    >>> 
    >>> b.tick()
    我是哈哈,该死的谁踢我
    >>>
    
    公有 和 私有
    >>> class Person:
        name == 'gaoyx'
    >>> a = Person()
    >>> a.name
    'gaoyx'
    #以上是公有的,可以调用。
    >>> #Python中如果定义私有变量只需要在变量名或者函数名前面加上“__”两个下划线,函数或者变量就会变为私有的了
    >>> 
    >>> class Person:
        __name = 'gaoyx'    
    >>> a =Person()
    >>> a.name
    Traceback (most recent call last):
      File "<pyshell#181>", line 1, in <module>
        a.name
    AttributeError: 'Person' object has no attribute 'name'
    >>> a.__name
    Traceback (most recent call last):
      File "<pyshell#182>", line 1, in <module>
        a.__name
    AttributeError: 'Person' object has no attribute '__name'
     #如果想得到里面的私有变量值,可以这么做
    >>> class Person: 
        __name = 'gaoyx'
        def getName(self):
            return self.__name
    
    >>> p =Person()
    >>> p.getName()
    'gaoyx'
    >>> 
    >>> #其实还可以这么访问
    >>> p._Person__name
    'gaoyx'
    >>> 因为Python把双下划线开头的变量改了名字,改为了 _类名__变量名
    
    
    继承

    在前面讲面向对象3个特征时候已经介绍过了,这里说一下,如果子类继了父类但是里面的某个方法被重新定义后,导致无法使用父类的方法,可以用这个解决:
    在子类被重新定义的方法里面写上:

    super().__init__()
    #__init__是父类的防范
    

    子类也可以继承多个父类,直接在()里面写多个父类的名字即可。

    组合

    当实体不像子类父类那样可以继承时,要是想放在一起可以使用组合,比如:定义一个类 叫水池,水池里面有乌龟和鱼。
    例如:

    class Turtle:
        def __init__(self,x):
            self.num = x
    
    class Fish:
        def __init__(self,x):
            self.num = x
    
    class 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()
    水池中总共有乌龟 1 只乌龟,小鱼 10 条!
    >>> 
    

    总结:所谓的组合就是把类的实例化放到一个新类里面,就会把旧类组合进去。

    相关文章

      网友评论

          本文标题:鱼C-python之 类& 对象

          本文链接:https://www.haomeiwen.com/subject/owconttx.html