美文网首页编程语言爱好者
详解Python类与对象(下)

详解Python类与对象(下)

作者: 罗罗攀 | 来源:发表于2021-07-14 05:33 被阅读0次

前言

上节课我们介绍了Python面向对象的基本概念和使用,本节课将继续讲解Python面向对象,主要分为两个部分,第一个是继承,第二个是私有化。

希望这两次分享能让初学者能够基本了解Python面向对象编程,并按实际需求编写出自己定义的类。

继承

继承是每个人的梦想。

继承的写法很简单,只需要在定义子类时,指定父类即可。

class Animal:

    leg = 4

    def __init__(self, species, furcolor):
        self.species = species
        self.furcolor = furcolor

    def call(self):
        return '{} is calling'.format(self.species)


class Dog(Animal):

    def __init__(self, species, furcolor, name):
        super().__init__(species, furcolor)
        self.name = name

    def get_name(self):
        print(self.name)


dog1 = Dog('dog', 'red', 'lucky')
print(dog1.call())
print(dog1.leg)
dog1.get_name()

dog is calling
4
lucky

继承其实比较好理解的,子类可以调用父类的属性和方法,如果子类重新进行了定义(我们通常叫重写),那就会使用子类的属性。

论私有化

在正式聊私有化之前,我希望你记住一句话,Python的私有化不是真正意义上的私有化。

默认情况下,我们是可以直接发问对象的属性和方法的,如下所示。

class Animal:

    leg = 4

    def __init__(self, species, furcolor):
        self.species = species
        self.furcolor = furcolor

    def call(self):
        return '{} is calling'.format(self.species)


dog = Animal('dog', 'gray')
print(dog.species)

dog

但有人觉得这样做破坏了封装的原则,我认为主要原因有两个。

第一目的是为了让程序员直接调用接口(可能是部分方法),而不用去关心具体内容,因为对他们而言,调用这些属性和方法没有意义。

第二个目的是在继承时的考虑,如果子类和父类具有同样的属性,那子类必定会覆盖属性,,定义了私有属性可以防止这样的事情发生。

那怎么让属性私有化了?其实很简单,我们用双下划线开始定义属性即可。

class Animal:

    leg = 4

    def __init__(self, species, furcolor):
        self.__species = species
        self.furcolor = furcolor

    def call(self):
        return '{} is calling'.format(self.species)


dog = Animal('dog', 'gray')
print(dog.species)

Traceback (most recent call last):
  File "/Users/luopan/Python练习/Python基础语法/类与对象.py", line 136, in <module>
    print(dog.species)
AttributeError: 'Animal' object has no attribute 'species'

还记得我之前说的那句话吗,真的不能调用了吗?我们来看看实例的dict属性。

class Animal:

    leg = 4

    def __init__(self, species, furcolor):
        self.__species = species
        self.furcolor = furcolor

    def call(self):
        return '{} is calling'.format(self.species)


dog = Animal('dog', 'gray')
print(dog.__dict__)

{'_Animal__species': 'dog', 'furcolor': 'gray'}

我们发现其实私有属性改为了_Animal__species,所以调用它,也是可以反问私有属性的。

dog = Animal('dog', 'gray')
print(dog._Animal__species)

dog

所以,有人不太赞同这种写法,并使用单下划线来代替,易于理解,定下这个规定,程序员也不在类外部访问这种属性。

总结

今天的分享就到这了,但Python类与对象的并不止这些,接下来我会慢慢分享给大家,希望大家持续关注罗罗攀,我们下期再见~

相关文章

  • 详解Python类与对象(下)

    前言 上节课我们介绍了Python面向对象的基本概念和使用,本节课将继续讲解Python面向对象,主要分为两个部分...

  • python 类

    类 用来描述具有相同的属性和方法的对象的集合。python中的类就是对象。 python 中的元类详解 创建Dog...

  • 详解Python类与对象(上)

    前言 面试官:什么是类?你:我这个人很实在,不知道什么叫累。面试官:恭喜你,你被录取了。 开个玩笑啊,对于Pyth...

  • python面向对象和元类的理解

    1 python类对象与实例对象 python中一切皆对象(广义上的对象),类也不例外,我们可以称类为类对象。py...

  • Python实现图像几何变换

    Python-Image 基本的图像处理操作ImageDraw类详解ImageFont类详解

  • 23.Python之面向对象(类与对象)

    Python之类与对象 类类:用来描述具有相同的属性和方法的对象的集合(在Python中类与类型是一个概念)。特点...

  • Python可迭代对象与迭代器详解

    Python可迭代对象与迭代器详解 首先先来了解几个概念 可迭代对象 (Iterable) : 实现了 __ite...

  • python自定义功能之面向对象

    本章主要内容 类与对象 定义和使用类 类的属性和方法 类的继承 类的方法重载 总结: python中的类与对象与J...

  • Python - 类与对象

    使用类的三步骤 Step 1. 定义类 类是对象的蓝图和模板 有了类就可以创建对象定义类需要做的两件事情:数据抽象...

  • python类与对象

    类是一种数据类型,而对象是具有这种数据类型的变量。类是抽象的,不占有内存空间。而对象是具体的,占有储层空间。 py...

网友评论

    本文标题:详解Python类与对象(下)

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