Python-封装对象类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/engerla/article/details/82952974

Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象。正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写法也是可以的,Python并不做硬性的限制。
在很多场景,我们都需要封装一个对象类,这样操作起来很方便快捷,接下来一步一步的和大家分享一下Python是怎么样封装类的。
版本一:
封装一个类,最基本的就是“init”方法,当创建一个对象时,就是调用“init”方法,根据传递的来初始化对象的值。

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender


if __name__ == "__main__":
    person = Person("张三", 12, "男")
    print(person)

运行测试一下:
在这里插入图片描述
测试输出新建Person的对象,发现输出的是一串地址,这样不利于我们直接观察。封装成对象还满足不了我们的需求,所以我们需要对版本进行一下升级

版本二:
那我们想要查看对象的值要怎么办呢?很简单,重写__str__方法。
原因:当我们print一个对象时,系统会调用默认的__str__方法,输出的是一串地址,但是不利于我们直接观察,所以我们需要根据我们自己的需求重写__str__方法。

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def __str__(self):#该方法可以根据自己的需求重写,没有固定的模式
        return "姓名:{},年龄:{},性别:{}".format(self.age, self.age, self.gender)

if __name__ == "__main__":
    person = Person("张三", 12, "男")
    print(person)

再次运行测试:
在这里插入图片描述
这样看起来就直观多了
版本三:
模拟这样一个场景:以相同的参数,初始化了两个对象,比较这两个对象是否相等,我们先通过代码实现一下:

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def __str__(self):
        return "姓名:{},年龄:{},性别:{}".format(self.age, self.age, self.gender)

if __name__ == "__main__":
    person = Person("张三", 12, "男")
    person1 = Person("张三", 12, "男")
    print(person == person1)

测试结果:
在这里插入图片描述
结果显示,两个对象并不相等

原因:从计算机的角度来讲,这是两个不同的对象,因为他们的地址不同,所以这两个对象不相等

但是从比较人性化的方面来讲,他们的值是相同,应该是相等的,而这也是我们的需求,需求有了,就可以根据需求来升级版本了。

我们只需要重写__eq__方法就行了,原因是当比较两个对象是否相等时,系统会调用默认的__eq__方法,而我们只需要根据自己的需求重写__eq__方法。

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def __str__(self):
        return "姓名:{},年龄:{},性别:{}".format(self.age, self.age, self.gender)

    def __eq__(self, other) -> bool:
        return (self.name == other.name) and (self.age == other.age) and (self.gender == other.gender)
    
if __name__ == "__main__":
    person = Person("张三", 12, "男")
    person1 = Person("张三", 12, "男")
    print(person == person1)

测试运行结果:
在这里插入图片描述
这次是我们想要的结果了。

以上就是我们平常的需要最多的几个需求。

猜你喜欢

转载自blog.csdn.net/engerla/article/details/82952974
今日推荐