目录
学习Python(12)封装&继承&多态&类方法和静态方法&类中的常用属性&单例设计模式
一.封装
1.概念
广义的封装:
函数和类的定义本身,就是封装的体现
狭义的封装:
一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的【只有当前类持有】,然后暴露给外界一个访问的方法即可【间接访问属性】
封装的本质:
就是属性私有化的过程
封装的好处:
提高了数据的安全性,提高了数据的复用性
说明:
举例:插排,不需要关心属性在类的内部做了什么样的操作,只需要关心将值传进去,或者将结果获取出来
封装: 函数 => 类 => 模块 => 包
2.私有属性和私有方法
私有属性:
如果想让成员变量不被外界直接访问,则可以在属性名称的前面添加两个下划线__,成员变量则被称为私有成员变量
私有属性的特点:只能在类的内部直接被访问,在外界不能直接访问
私有方法
如果类中的一个函数名前面添加__,则认为这个成员函数时私有化的
特点:也不能在外界直接调用,只能在类的内类调用
# 类
class Person:
def __init__(self, name, age, sex):
self.name = name # 公有属性
self.__age = age # 私有属性: 双下划线开头的属性, 只能在当前类内部使用
self._sex = sex # 公有属性,但是不建议这么写
def run(self):
print(self.__age)
self.__eat()
# 私有方法
def __eat(self):
print("eat")
# 对象
p = Person('鹿晗', 30, '男')
print(p.name)
# print(p.__age) # 报错,__age是私有属性
print(p._sex)
p.run()
print()
# p.__eat() # 报错,__eat()是私有方法
# 下面的方式可以调用私有属性或私有方法,但是不要这么用
# print(p._Person__age)
# p._Person__eat()
3.@property装饰器
1.装饰器的作用:
可以给函数动态添加功能,对于类的成员方法,装饰器一样起作用
2.Python内置的@property装饰器的作用:将一个函数变成属性使用
3.@property装饰器:简化get函数和set函数
4.使用:@property装饰器作用相当于get函数,同时,会生成一个新的装饰器@属性名.settter,相当于set函数的作用
5.作用:使用在类中的成员函数中,可以简化代码,同时可以保证对参数做校验
class Person:
def __init__(self, name, wechat):
self.name = name
self.__wechat = wechat
# # getter 间接获取私有属性
# def get_wechat(self):
# return self.__wechat
#
# # setter 间接修改私有属性
# def set_wechat(self, new_wechat):
# self.__wechat = new_wechat
@property # 作用:让wechat函数可以当成属性来调用
def wechat(self):
return self.__wechat
@wechat.setter
def wechat(self, new_wechat):
self.__wechat = new_wechat
@property
def photo(self):
s = self.name + self.__wechat
return s
# 对象
p = Person('刘亦菲', '110')
# print(p.get_wechat())
#
# p.set_wechat('119')
# print(p.get_wechat())
print(p.wechat)
p.wechat = '120'
print(p.wechat)
print(p.photo)
二.继承
如果两个或者两个以上的类具有相同的属性或者成员方法,我们可以抽取一个类出来,在抽取的类中声明公共的部分
被抽取出来的类:父类,基类&#x