美文网首页
python学习七

python学习七

作者: 多啦A梦的时光机_648d | 来源:发表于2020-03-24 19:27 被阅读0次

    对象

    1.创建类对象

    对象 = 属性+方法(方法其实就是函数)
    类可以看做是用于建造房子的图纸,经过类实例化后的对象才是可以住人地房子。self参数就相当于每个房子的门牌号

    class Turtle:   ##python中约定类名以大写字母开头
        """"关于类的一个简单例子"""
        # 属性
        color = 'green'
        weight = 10
        legs = 4
        shell =True
        mouth = '大嘴'
        # 方法(函数)
        def climb(self):
            print('我正在努力的爬...')
        def sleep(self):
            print('睡了睡了zzz')
    

    由类生成对象,又叫类对象

    Turtle()  ##直接创建实例对象
    tt = Turtle()  ## 将类对象赋值给tt。
    

    调用对象方法(函数)

    tt.climb()
    我正在努力的爬...
    

    2. oo的特征

    oo=objected oriented(面向对象)
    python就是一个面向对象的编程

      1. 封装
      1. 继承

    继承就是子类自动继承父类的数据与方法的机制

    class Mylist(list):   ##创建一个Mylist()类
        pass    ##占位符
    list2 = Mylist()   ##将类赋值给实例对象
    list2.append(4)  ##这里可以看到list2()继承了list()的方法,可以用list.append()添加数据
    print(list2)
    4
    
      1. 多态

    多态就是不同对象对同一方法响应不同的行动

    class A:
        def fun(self):
            print('我是小A...')
    class B:
        def fun(self):
            print('我是小B...')
    a = A()
    b = B()
    a.fun()
    b.fun()   ##a与b两个不同的对象都是调用了相同的fun()方法(函数)实现不一样的结果。
    
    我是小A...
    我是小B...
    

    3. self是什么?

    class Ball:
        def setName(self, name):
            self.name = name
        def klick(self):
            print('我是%s,该死的...'% self.name)
    a = Ball()
    a.setName('大球')   ##a的门牌号
    b = Ball()
    b.setName('二球')
    c = Ball()
    c.setName('三球')
    a.klick()
    b.klick()
    c.klick()
    
    • init()方法

    init(self, param1, param2...)
    在实例化对象的时候可以传人参数,这些参数会自动传人到init方法中,我们可以通过重写这个方法来自定义对象的初始化操作。

    class Ball:
        def __init__(self, name):  ##重写__init__方法,如果不重写的话默认就是def __init__(self):
            self.name = name
        def klick(self):
            print('我是%s,该死的...'% self.name)
    a = Ball('大球')
    a.klick()
    

    4.继承

    class Parent():    ##定义一个父类
        def hello(self):
            print('正在调用父类....')
    class Child(Parent):   ##定义一个子类,括号内为继承的父类名字
        pass
    P = Parent()
    P.hello()
    正在调用父类....
    C = Child()   
    C.hello()
    正在调用父类....   ## 可以看到子类继承了父类的方法(函数)
    

    如果子类中定义域父类相同的方法与属性,则会覆盖父类的方法与属性。

    class Parent():    ##定义一个父类
        def hello(self):
            print('正在调用父类....')
    class Child(Parent):
        def hello(self):
            print('正在调用子类....')
    P = Parent()
    P.hello()
    正在调用父类....
    C = Child()   
    C.hello()
    正在调用子类....   ## 可以看到子类方法覆盖了父类的方法(函数)
    
    • super函数
    import random as r
    class Fish:
        def __init__(self):
            self.x = r.randint(1,10)
            self.y = r.randint(1,10)
        def move(self):
            self.x -= 1
            print("我的位置是",self.x, self.y)
    class Goldfish(Fish):
        pass
    class salmon(Fish):
        pass
    class Shark(Fish):
        def __init__(self):
            self.hungry = True
        def eat(self):   ##在重写方法的时候覆盖了父类的方法,会导致报错。
            if self.hungry:
                print('吃货的梦想就是天天有得吃')
                self.hungry = False
            else:
                print("吃不下了...")
    shark = Shark()
    shark.eat()
    shark.eat()
    shark.move()
    ##
    吃货的梦想就是天天有得吃
    吃不下了...   ##可以正确调用子类的eat()方法
    Traceback (most recent call last):
      File "C:/shiyan/honghua/test.py", line 25, in <module>
        shark.move()
    AttributeError: 'Shark' object has no attribute 'move'   ##无法调用父类的move()方法。
    ##### 解决用super函数
    super.__init__()   ##super.加需要的父类
    import random as r
    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):
        pass
    class salmon(Fish):
        pass
    class Shark(Fish):
        def __init__(self):
            super().__init__()    ##super.需要的父类方法
            self.hungry = True
        def eat(self):
            if self.hungry:
                print('吃货的梦想就是天天有得吃')
                self.hungry = False
            else:
                print("吃不下了...")
    goldfish = Goldfish()
    goldfish.move()
    shark = Shark()
    shark.move()
    
    

    python支持一次继承多个父类方法

    class DeriverBaseName(Base1, Base2, Base3...):
    

    5.多重继承

    class Base1:
        def foo1(self):
            print('正在调用Base1')
    class Base2:
        def foo2(self):
            print('正在调用Base2')
    class C(Base1,Base2):
        pass
    c = C()
    c.foo1()
    c.foo2()
    
    

    相关文章

      网友评论

          本文标题:python学习七

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