python学习七

2020-03-24  本文已影响0人  多啦A梦的时光机_648d

对象

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就是一个面向对象的编程

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

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

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

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(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()
正在调用子类....   ## 可以看到子类方法覆盖了父类的方法(函数)
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()

上一篇 下一篇

猜你喜欢

热点阅读