隐藏类中的属性|学习笔记

简介: 快速学习 隐藏类中的属性

开发者学堂课程【Python 语言基础 3:函数、面向对象、异常处理隐藏类中的属性】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/601/detail/8748


隐藏类中的属性


目录:

一、封装的优点

隐藏属性

 

一、封装的优点

封装的优点,由于它在以下代码里有些地方是无法体现的,所以现在讲它的第二个优点。

class Dog:

表示狗的分类

def_init_ (self , name , age):

self. hidden_ name = name

self.hidden_ age = age

def say_ hello(self):

print(‘大家好,我是%s "%seIf. hidden_ name )

def get_ name(self):

get_name( )用来获取对象的name属性

首先,先创建一个新的文件,以封装命名,它的第二个优点仍然围绕我们的 getter方法和 setter 方法,使用 setter 方法设置属性,可以增加数据的验证,确保数据的值是正确的。使用 getter 方法获取属性,可以使用 setter 方法设置属性。在某些情况下我们会创建一些特殊类

class Rectangle :

表示矩形的类

def_init_ (self , width,height):

self. hidden_ width = width

self. hidden_ height = height

 

def get_width(self):

  retern self. hidden_ width

def get_height(self):

return self. hidden_ height

def set_width(self , width):

self. hidden_ width = width

def set_ height(self , height):

self. hidden_ height = height

 

矩形里面有个面积公式,因为已经设置了它的长度和宽度,所以它的面积是不需要设置的直接就能得出来,此时若需要知道它的面积,只需要在代码后面加上

def set_areg(self):

return self.hidden_width * self.hidden_height

即可得出面积

设置长度和宽度

r = Rectangle(5,2)

print(r.get_area())

运行结果显示为在长为 5 宽为 2 的矩形里,面积为 10

由此可以看出它的另一个优点为:使用 getter 方法可以表示一些计算的属性

 

二、隐藏属性

class Person:

def_init_ (self ,name):

self. hidden_ name = name

 

def get_ name(self) :

return self. hidden_ name

 

def set_ name(self , name) :

self. hidden_ name = name

p = Person(‘孙悟空’)

print(p.get_name())

 

现在这种隐藏属性的封装方式主要就是在属性前面加上 hidden,外部依然可以访问,但在某些情况下我们不希望外部可以访问,那就可以为对象的属性使用双下划线开头,_xxx 后面跟属性。双下划线开头的属性,是对象的隐藏属性,隐藏属性只能在类的内部,无法通过对象访问。

class Person:

def __init__ (self , name):

self.__name = name

 

def get_ name(self):

return self.__name

 

def set_ name(self , name) :

self.__name = name

p = Person(‘孙悟空’)

print(p.__name)

print(p.get_ name( ))

因为双下头线的开头属性是隐藏属性,无法通过对象访问

隐藏属性只不过是 Python 自动为属性改了名字。实际上是将名字修改为了,_类名_属性名 比如  __name -> _Person__name

class Person:

def __init__ (self , name):

self.__name = name

 

def get_ name(self):

return self.__name

 

def set_ name(self , name) :

self.__name = name

p = Person(‘孙悟空’)

print(p.__Person__name)

p._Person__name = ‘猪八戒’

print(p.get_ name( ))

同理 给函数加双下划线也是一样的,使用__开头的属性,实际上依然可以外部访问,所以这种方式我们一般不用,一般我们会将一些私有属性(不希望被外部访问的属性)以_开头。

一般情况下使用_开头的属性都是私有属性,没有特殊需要不要修改私有属性。

相关文章
|
JSON 自然语言处理 JavaScript
介绍16个让你的代码变漂亮的属性
介绍16个让你的代码变漂亮的属性
318 0
介绍16个让你的代码变漂亮的属性
|
安全 Linux 数据安全/隐私保护
6.4.2 文件隐藏属性
6.4.2 文件隐藏属性
73 0
|
Java 编译器
深入探索: 对象构造的隐藏功能与技巧
深入探索: 对象构造的隐藏功能与技巧
102 0
|
安全 程序员 编译器
【C++】继承(万字详解) —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承(上)
【C++】继承(万字详解) —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承(上)
255 0
【C++】继承(万字详解) —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承(上)
|
存储 Java C++
【C++】继承(万字详解) —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承(下)
【C++】继承(万字详解) —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承(下)
141 0
【C++】继承(万字详解) —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承(下)
|
开发者 Python
类属性和对象属性|学习笔记
快速学习类属性和对象属性
类属性和对象属性|学习笔记
|
JavaScript 开发者
veu 中通过属性绑定为元素设置 class 类样式 | 学习笔记
快速学习 veu 中通过属性绑定为元素设置 class 类样式
178 0
veu  中通过属性绑定为元素设置 class 类样式  |  学习笔记
|
存储 安全 Java
【C++】继承 —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段。它允许程序员在保持原有类(基类)特性的基础上进行扩展,增加功能,产生新的类,称派生类。
125 0
【C++】继承 —— 切片 | 隐藏 | 子类的默认成员函数 | 菱形继承
重写、重载和隐藏
重写、重载和隐藏
153 0
|
开发者 Python
属性和方法|学习笔记
快速学习 属性和方法
105 0