python面向对象中容易忘记的——私有化的属性和方法

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python面向对象中容易忘记的——私有化的属性和方法相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱
这是我听老师讲课做的笔记
大家好,我叫陈运智,大家可以叫我

目的:通过声明私有化属性、方法,保护和控制数据,使无法直接通过类名修改类属性

一. 私有化属性

  1. 定义:为了更好的保存属性安全,即不能随意修改,将属性定义为私有属性,添加一个可调用的方法去访问。

  2. 作用:私有属性不能被子类外部继承访问,只能在内部访问使用

  3. 使用:在属性名前加__就变成了私有属性

  4. 代码事列

class Person(object):
    __age=18#定义一个私有类属性前面加两个下划线
    def get_age(self):#访问私有类属性
        return Person.__age
    def set_age(self,age):#修改
        Person.__age=age
chen=Person()

(1)私有化属性可以在类里面访问(get_age),修改(set_age)。定义两个实例进行访问和修改

print(chen.get_age())
chen.set_age(20)#修改私有类属性
print(chen.get_age())
输出:
18
20

(2) 私有化属性不能再类外面访问

print(Person.__age)#类对象无法访问私有类属性
print(chen.__age)#实例对象无法访问私有属性

会报错

(3)子类不能继承私有化属性
具体的子类父类问题可以看这篇文章python必学的面向对象基础之继承静态与多态

#定义一个子类
class China(Person):
    def get_age(self):
        print(self.__age)#尝试访问父类的私有化属性
yun=China()
yun.get_age()

报错异常:

1.1 Property属性

  1. 目的:就是你定义了私有属性,又如何通过高效的方法访问和修改私有方法,让使用者感到用的是个属性,不是方法

  2. 用法:在方法上使用装饰器 @property@age.setter,相当于上面的getset方法

class Person(object):
    def __init__(self):
        self.__age=18#定义一个私有类属性
    @property#使用装饰器对age进行装饰,提供一个getter方法,可以访问私有类属性
    def age(self):#访问实例属性
        return self.__age
    @age.setter #使用装饰器进行装饰,提供一个setter方法修改私有类属性
    def age(self,age):#修改私有类属性
        if age<0:
            print('年龄不小于0')
        else:
            self.__age=age
chen=Person()#定义对象
chen.age=15#修改私有类属性
print(chen.age)#访问私有类属性

输出:
15

二. 私有化方法

跟私有化属性差不多,不能直接调用,可以再内部调用

  1. 作用:不允许外部调用,防止子类意外重写,把普通的方法设置成私有化方法

  2. 代码事列

class Animal:
    ## 在方法前面加两个 __ 下划线,变成私有化方法
    def __eat(self):
        print('吃东西')
        pass
    # 普通方法
    def run(self):
        self.__eat() #在此调用私有化的方法
        print('飞快的跑')
    pass

b1=Bird()

(1)直接调用eat

b1.eat()# 调用私有化方法,报错

报错

(2)调用run

b1.run()# 正常调用
#输出:
#吃东西
#飞快的跑

本人博客:https://blog.csdn.net/weixin_46654114
本人b站求关注:https://space.bilibili.com/391105864
转载说明:跟我说明,务必注明来源,附带本人博客连接。

请给我点个赞鼓励我吧

以上是关于python面向对象中容易忘记的——私有化的属性和方法的主要内容,如果未能解决你的问题,请参考以下文章

Python 面向对象 --- 私有属性和私有方法

python 面向对象介绍

python面向对象--私有和继承

python运维开发之第六天

Python面向对象:面向对象(OOP)基本概念类和对象基础语法封装案例私有属性和私有方法

Python面向对象:面向对象(OOP)基本概念类和对象基础语法封装案例私有属性和私有方法