【Python入门】day-14 初识类与对象②

上篇主要介绍了类中的变量的定义与各种特性,本篇将开始介绍类中的方法。

目录

1、定义函数

2、函数参数

3、构造函数

4、嵌套类

5、super方法

6、Mix-in


1、定义函数

有别于C中的结构体,类中可以直接定义函数:

class Zoo:
    def dog_say(self):
        print("汪汪汪")


dog = Zoo()
dog.dog_say()

2、函数参数

在类中的函数都有一个参数self,这个self其实就是实例对象本身,作用在于绑定一个实力对象,相当于提供第一个地址。

class Zoo:
    def dog_say(self):
        print(self)


dog = Zoo()
dog.dog_say()
print(dog)

self就是实例对象本身, 通过这个self绑定实例对象,从而实现操作只针对该实例对象。

3、构造函数

书接上文,self的特点在构造函数中大显身手。在类中我们可以使用__init__构造函数,使用__dict__方法可以查看实例对象中的变量。

class Zoo:
    def __init__(self, x, y):
        self.a = x
        self.b = y

    def plus(self):
        print(self.a + self.b)


zoo1 = Zoo(1, 1)
# 此时就应该加入参数
print(zoo1.__dict__)
zoo1.plus()
zoo2 = Zoo(2, 2)
print(zoo2.__dict__)
zoo2.plus()

 不难得出,self的作用在于连接实例对象与操作,self就是实例对象本身(self.a == zoo1.a)。

4、嵌套类

书接上文,继续用到self,Python中可以嵌套类,定义如下:

class Dog:
    def say(self):
        print("汪汪汪")


class Cat:
    def say(self):
        print("喵喵喵")


class Zoo:
    dog = Dog()
    cat = Cat()

    def say(self):
        self.dog.say()
        self.cat.say()


zoo = Zoo()
zoo.say()

self.dog.say()和self.cat.say()如果不加self就会报错,此时self就是zoo。

5、super方法

在继承中,要避免多重继承的问题:

class A:
    def __init__(self):
        print("I am A~")


class B1(A):
    def __init__(self):
        A.__init__(self)
        print("I am B1~")


class B2(A):
    def __init__(self):
        A.__init__(self)
        print("I am B2~")


class C(B1, B2):
    def __init__(self):
        B1.__init__(self)
        B2.__init__(self)
        print("I am C~")


c = C()

我们可以看到A被调用了两次,有点类似于链式法则,为了避免这种情况,可以使用super方法。

 将代码修改为:

class A:
    def __init__(self):
        print("I am A~")


class B1(A):
    def __init__(self):
        super().__init__()
        print("I am B1~")


class B2(A):
    def __init__(self):
        super().__init__()
        print("I am B2~")


class C(B1, B2):
    def __init__(self):
        super().__init__()
        print("I am C~")


c = C()

 A不再被调用两次,super方法避免了重复调用。

6、Mix-in

Mixin可以译为混入,就是在不改变原对象的情况下对其进行扩展,利用继承的方法实现:

假设我们原来有类A:

class A:
    def say(self):
        print("生活就像海洋")

我们想让类A在打印一句“只有意志坚强的人才能到达彼岸”,我们可以增加类B,让A继承B,从而实现该操作:

class B:
    def say(self):
        print("只有意志坚强的人才能到达彼岸")


class A(B):
    def say(self):
        print("生活就像海洋")
        B.say(self)


a = A()
a.say()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值