美文网首页Python小哥哥
Python的类和方法——成员可见性

Python的类和方法——成员可见性

作者: 我爱学python | 来源:发表于2019-04-26 14:49 被阅读13次

我们继续接着类和对象这个话题聊。

1.类方法

使用装饰器@classmethod。第一参数必须是当前类对象,该参数名一般约定为「cls」,当然cls也可以换成其他名字,通过它来传递类的属性和方法(不能传实例的属性和方法)

如下场景:假设现有一个学生类和班级类,想要实现:执行班级人数增加的操作、获得班级总人数。

2.静态方法

使用装饰器@staticmethod,静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。

我的理解是,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。可以用静态方法的地方,都可以用类方法代替。但不要经常使用静态方法,因为和面向对象关联性很弱。

3.成员的可见性:公开和私有

默认情况下,Class内部创建的属性和方法,外部代码是可以通过实例调用直接操作的;但有时候为了保证封装性,我们不希望这些内部属性被外部直接访问。这就需要设置成员可见性。

设置方法:在属性或方法名前面添加两个下划线「__」,成员私有化的作用,确保外部代码不能随意修改对象内部的状态,增加了代码的安全性。

应用场景:定义一个学生类名,在这个类下面,定义分数这个对象,现要给每个学生打一个分数,如果我们允许从外部修改分数,那么如果分数修改为-1时,就与逻辑不符,所以,我们需要通过对变量私有化,以及在类的内部定义一个方法,通过对方法修改变量,就可以对输入的分数做出正确判断。

4.总结

Python中的构造函数前面有双下划线,但它却可以从外部访问,因为在init的后面也有双下划线。所以,我们命名时不推荐使用__name__、__score__这样的形式。

双下划线的实例变量并不是一定不能从外部访问

在上面这段代码中,print(student1.__score)是可以打印出结果的,但print(student2.__score),我们可以通过之前讲过的.__dict__的方法看看内部储存情况。

那么,如果想继续对student2.__score访问,可以将代码改为student2._Student__score就可以实现对__score的访问了,所以说Python本身没有任何机制阻止你干坏事,一切全靠自觉。

相关文章

  • Python的类和方法——成员可见性

    我们继续接着类和对象这个话题聊。 1.类方法 使用装饰器@classmethod。第一参数必须是当前类对象,该参数...

  • Python的类和方法——成员可见性

    我们继续接着类和对象这个话题聊。 1.类方法 使用装饰器@classmethod。第一参数必须是当前类对象,该参数...

  • @classmethod和@staticmethod的区别

    简介 类的成员 python中类的成员可以分为三大类:字段、方法和属性 类的方法 包括:普通方法、静态方法和类方法...

  • 一个Java 程序员的python学习之路7- private

    在python类的语境下,private意味着属性和方法只对class的成员可访问,对类外部是不可访问的。 pri...

  • TypeScript 基础 — 类

    TypeScript 向 JavaScript 类添加类型和可访问性修饰符。 类成员的类型 类的成员(属性和方法)...

  • python入门与进阶(9-12 9-13)

    9-12 成员可见性:公开和私有9-13 没有什么是不能访问成员的可见性就是变量和方法的可见性!看看思维导图

  • 牛客第四天

    Static修饰成员变量和成员方法,也可修饰静态代码块,不可以修饰类及类成员。 Statement在JDBC中相当...

  • 15. 类及其成员的可见性

    类及其成员的可见性 KotlinJavaprivateprivateprotectedprotected-defa...

  • 枚举和类

    枚举和类的异同 相同点: 枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器。 枚举类也可...

  • 方法声明

    方法声明:良好的程序设计应该尽可能减小类与类之间耦合,所遵循的经验法则是:尽量限制成员函数的可见性。如果成员函数没...

网友评论

    本文标题:Python的类和方法——成员可见性

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