初学者初学者python笔记(封装、反射、类内置笔记(封装、反射、类内置attr属性、包装与授属性、包装与授
权)权)
文章目录文章目录封装反射动态导入模块类内置attr属性包装与授权
本篇文章仍然是面向对象的相关内容,主要分析了封装、反射、动态导入模块、类内置
attr
属性、包装与授权三大面向对象编
程的后续处理方法
封装封装
封装的本质:封装的本质:
把方法放到类里、把类放到模块里就叫装;
而其他地方导入模块、引用类、调用方法时看不到对应的模块、类、方法的具体逻辑,只知道名字就可以,因为它们是隐藏着
的,这就叫封
封装的本质就要明确区分内外,因此封装是一种思想,内部就是内部,外部就是外部
class People:
#以_开头的变量就是被隐藏的变量,外部使用它的时候就无法看到它
_place= 'Beijing'
__position= 'Python'
def __init__(self,id_num,name,age,salary):
self.id_num= id_num
self.name= name
self.age= age
self.salary= salary
def get_id(self):
print('I am a privacy,我需要找的id为【%s】' %self.id_num)
#实例化
v1= People('12345678','Zoro',22,2000000)
print(v1._place)
#虽然被隐藏了,但是仍然可以调用它,隐藏只是一种约定,但python没有真正限制你去访问
#但是__开头的,就必须带上类名
#print(v1.__position)
print(v1._People__position
运行结果:
真正效果上的封装:真正效果上的封装: 明确区分内外,内部的实现逻辑,外部无法知道,并且为封装到内部的逻辑提供一个访问接口给外部使
用
反射反射
反射的本质:反射的本质:
也叫做程序的自省,主要指程序可以访问、检测和修改它本身状态的一种能力
class BadGuy:
feature= 'Ugly' #特征是丑
def __init__(self,name,address): #两个参数,一个名字一个地址
self.name = name
self.address= address
#动作(函数属性)
def sell_house(self):
print('【%s】 正在卖房子'%self.name)
def rent_house(self):
print('【%s】 正在租房子' %self.name)
#实例化
p1= BadGuy('黑中介','沙河')
#p1.sell_hourse()
#开始自我反省(反射)
print(hasattr(p1,'name')) #对象中是否有name这个属性,返回值为布尔值