026 面向对象05——封装

Posted garland-py

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了026 面向对象05——封装相关的知识,希望对你有一定的参考价值。

0、复习

继承 (了解)
抽象类和接口类 from abc import ABCMeta,abstractmethod
python中没有内置 接口的概念,所有的抽象类和接口类都是用来规范子类的
接口类和抽象类不能被实例化
多态 (了解)
java中的多态和python中的鸭子类型
在某些强数据类型语言中,
归一化设计(函数的参数的问题上),需要传递参数的数据类型
为了几个类的对象都可以作为参数传递给函数,
就给这几个类创建一个父类,这样的话让父类成为这个参数的数据类型
子类的所有对象就都能够作为参数传递了
在python中,传递参数的时候,是弱数据类型特征,不需要指定参数的数据类型
鸭子类型 (list tuple str)
多个有相似特征的数据类型之间,不通过继承建立关系.
而是通过一种约定俗成的制度来约束
list tuple str ---> 序列

1、封装

封装
广义上的封装 : 属于一个类的静态和动态属性 总是出现在一个类中
使用的使用永远用类名或者对象名调用
狭义上的封装 : 就是把变量\方法私有化,在类的外部以及子类中不能直接使用了
技术分享图片
class A:
    STATIC = aaa  # 静态变量
    __S = bbb     # 私有的静态变量
    def wahaha(self):
        print(A.__S) # _A__S
print(A.STATIC)
print(A.__dict__)
print(A._A__S)      # 在类的外面调用私有的变量
a = A()
a.wahaha()
A.__B = ccc   #在类的外部添加了一个静态变量
print(A.__dict__)  #我们不能在一个类的外部创建一个"私有的"变量
print(A.__B)
私有的静态变量
技术分享图片
class B:
    def __init__(self,name,pwd):
        self.name = name
        self.__pwd = pwd   # 也可以创建对象的私有属性

    def qqxing(self):
        self.__a = A     # _B__a

    def get_pwd(self):
        print(self.__pwd)
b = B(alex,alex3714)
b.qqxing()
print(b.name)
print(b._B__pwd)  # 当在类外部的时候,我们也不能直接使用对象的私有属性
b.get_pwd()
创建对象的私有属性并调用
私有的 静态变量 对象属性 方法
私有的 只能在类的内部定义和使用
__名字
在类外部使用私有静态变量 _类名__私有的名字
私有的名字 不能被子类继承

java
private 私有的 - __变量名
protect 保护的 - N/A
public 公共的 - 正常的变量
技术分享图片
class Room:
    def __init__(self,owner,price,length,width,height):
        self.owner = owner
        self.__price_single = price  #单价
        self.__length = length
        self.__width = width
        self.height = height

    def get_area(self):
        return self.__length * self.__width

    def get_price(self):
        return self.__price_single * self.get_area()

alex = Room(alex,1000000,2,1,0.8)
print(alex.get_area())
print(alex.get_price())
还是封装

 

2、内置函数property

通过将内置函数 property作为装饰器 @property   来实现将一个方法(函数)伪装成属性

3、

4、




























以上是关于026 面向对象05——封装的主要内容,如果未能解决你的问题,请参考以下文章

python之路之前没搞明白4面向对象(封装)

设计模式05-面向对象四大特性能解决什么问题

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

days05--面向对象之封装

面向对象特性之封装