python之路--面向对象之封装

封装

什么是封装?

隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处

  1. 将变化隔离
  2. 便于使用
  3. 提高复用性
  4. 提高安全性

封装原则

  1. 将不需要对外提供的内容都隐藏起来;
  2. 把属性都隐藏,提供公共方法对其访问。

封装方法

在python中用下划线开头的方式,将属性隐藏起来(设置成私有)即封装

私有属性

私有属性一

class Person:
    def __init__(self,height,weight,name,sex):
        self.__height = height            # 私有属性:外部不能调用
        self.weight = weight
        self.name = name
        self.sex = sex

    def tell_bmi(self):
        return self.weight / self.__height ** 2
    def tell_height(self):      # 建议这样查看值,用户不可以直接修改
        return self.__height

    def set_height(self,new_height):        # 建议这样修改值,即安全又人性化
        self.__height = new_height if new_height > 20 else self.__height
        return self.__height            # return不能返回赋值语句

dennis = Person(1.75,120,‘dennis‘,‘man‘)
print(dennis.tell_bmi())
print(dennis.__dict__)
print(dennis._Person__height)
print(dennis.tell_height())
print(dennis.set_height(-123))      # 设置不成功

# 私有属性:
# 在本类中就可以正常使用
# 在本类外就必须_类名__属性名调用(不建议使用)

私有属性二

class Goods:
    __price = 3         ### 私有公共属性
    def __init__(self,name,num):
        self.name = name
        self.num = num
    def goods_price(self):
        return self.num * Goods.__price

banana = Goods(‘egon‘,2)
print(banana.goods_price())
print(Goods.__dict__)
print(Goods._Goods__price)

私有方法

class Foo:
    def __init__(self,height,weight):
        self.height = height
        self.weight = weight

    def tell_bmi(self):
        return self.weight / self.__height_pow()
    def __height_pow(self): # 私有方法
        return self.height ** 2

dennis = Foo(1.7,125)
print(dennis.tell_bmi())
print(dennis._Foo__height_pow())    # 不建议

property属性

什么是property

property 把类中一个方法变成了一个方法去实现
@property 实现了只读
@property x.setter 实现了可读可写(x.setter依赖@property,x为被装饰方法的方法名)

class Goods:
    __discount = 0.8    # 类的私有属性
    def __init__(self,name,price):
        self.name = name
        self.__price = price

    @property        # 只读
    def price(self):
        return self.__price * Goods.__discount

    @price.setter      # 可写
    def price(self,new_price):
        self.__price = new_price

    @price.deleter
    def price(self):
        del self.__price    # 只能删除self赋值的命名
#       del self.name
        print(‘在执行删除操作啦!‘)
apple = Goods(‘apple‘,20)
print(apple.price)
apple.price = 40
print(apple.price)

del apple.price     # 删除会执行price.deleter里的
# print(apple.price)          # 因为删掉了__price,所以再次print会报错

用namedtuple实现只有属性的类

from collections import namedtuple

Course = namedtuple(‘Course‘,[‘price‘,‘period‘,‘name‘])
python = Course(20000,‘6 months‘,‘python‘)
print(python.name)

来自为知笔记(Wiz)

时间: 2025-01-07 15:48:05

python之路--面向对象之封装的相关文章

python之路---面向对象编程(二)

类的继承 1.在python3中,只有新式类,新式类的继承方式为:广度优先.而python2中,经典类的继承方式为:深度优先.那么我们来看看深度优先和广度优先的区别吧 如下图,为类之间的继承关系.B,C继承A,D继承B,E继承C,F继承D,E   深度优先: class A: # def foo(self): # print 'from A' pass class B(A): # def foo(self): # print 'from B' pass class C(A): # def foo

Python全栈之路----面向对象开发----封装

封装之如何隐藏属性 在python中用双下划线开头的方式设置属性将属性隐藏起来(设置成私有的),以双下划线开头且双下划线结尾的是python的内置方法. # 其实这仅仅这是一种变形操作 # 类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class A: __N=0 # 类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的,如__N,会变形为_A__N def __init__(self): self.__X=10 # 变形为self._A__X def

python之路——面向对象(基础篇)

面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 "对象" 的使用. 面向对象技术简介 类(class):用来描述有相同属性和方法的对象的集合,它定义了集合中每个对象所共有的属性和方法. 对象(object):类的实例 创建类和对象 1 class Person: 2 3 def __init__(self,name,age):

python之路---面向对象编程(一)

一.设计思想的发展 面向机器(代码复杂,效率低,学习成本高,开发周期长)-------->面向过程(扩展性差,不适用多变的需求改变)----------->面向对象(扩展性好,但是可控性差) 二.面向过程和面向对象对比 面向过程: 定义:面向过程的核心是过程(即流水线式设计),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也

Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-" 什么是面向对象 面向对象就不像面向过程那样按照功能划分模块了,它所关注的是软件系统有哪些参与者,把这些参与者称为对象,找出这些软件系统的参与者也就是对象之后,分析这些对象有哪些特征.哪些行为,以及对象之间的关系,所以说面向对象的开发核心是对象 什么是类 面向对象编程的两个重要的概念:类和对象 类是

python学习_day26_面向对象之封装

1.私有属性 (1)动态属性 在python中用双下划线开头的方式将属性隐藏起来.类中所有双下划线开头的名称,如__x都会自动变形成:_类名__x的形式.这种自动变形的特点是: a.类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果.b.这种变形其实正是针对外部的变形,在外部是无法通过__x这个名字访问到的.c.在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆

Python之路 - 面向对象初识

本章内容 编程范式介绍 类与实例 属性与方法 构造函数 命名空间 属性(静态和动态) 与类的关系 对象交互与类的组合 一.编程范式 编程是程序员用 特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程 , 而实现一个任务的方式有很多种不同的方式 , 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式 面向过程编程 Procedural Programming 面向过程编程就是程序从上到下一步步执行 , 基本设计思路就是程序一开始是要着手解决一个大的问题

python之路 面向对象(一)

面向过程vs面向对象 面向过程的核心是过程,是解决问题的步骤. 优点:极大降低了写程序的复杂度,只需顺着要执行的步骤,码代码即可. 缺点:一套程序解决一个问题,牵一发动全身. 面向对象的核心是对象. 优点:解决了程序的扩展性,对某一个单一对象的修改,会映射到整个体系中. 缺点:可控性差,无法向面向过程一样可以很精准的预测到结果,面向对象程序一旦开始就由对象之间的交互解决问题,无法预测结果. 类和对象(实例) python中一切皆对象,类型的本质就是类,包括字典,列表,数字,字符串等. 在pyth

Python之路 - 面向对象学习

面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言