Ⅰ 面向对象三大特征之封装
【一】面向对象的三大特性
【二】什么是封装
【三】为什么要封装?
class Student():
...
def __init__(self, name):
self.name = name
def change_name(self):
self.name = 'nb_' + self.name
stu1 = Student(name='silence')
stu1.change_name()
print(stu1.name)
【四】封装的方法
比如
【五】封装隐藏属性
【1】数据属性
class Person:
SCHOOL_NAME = '清华'
def __init__(self, name):
self.name = name
student = Person(name='silence')
print(student.name)
print(Person.__dict__)
print(student.SCHOOL_NAME)
class Person:
__SCHOOL_NAME = '清华'
def __init__(self, name):
self.name = name
student = Person(name='silence')
print(student.name)
print(Person.__dict__)
print(student.__SCHOOL_NAME)
print(student._Person__SCHOOL_NAME)
【2】函数属性
class Person:
__SCHOOL_NAME = '清华'
def __init__(self, name):
self.name = name
def __change_name(self):
self.name = 'nb_' + self.name
student = Person(name='silence')
print(student.name)
print(Person.__dict__)
print(student.__change_name())
【3】补充
print(student.name)
print(Person.__dict__)
student.__SCHOOL_NAME = '北大'
print(student._Person__SCHOOL_NAME)
print(Person.__dict__)
print(student.__dict__)
print(student.__SCHOOL_NAME)
【六】什么是开放接口
class Teacher:
def __init__(self, name, age):
self.__name = name
self.__age = age
def set_info(self, name, age):
if not name.startswith('lj_'):
raise ValueError("名字必须是 lj 前缀")
if not age.isdigit():
raise ValueError("年龄必须是数字")
if int(age) < 0:
raise ValueError("年龄超出常人,建议回炉重造!")
self.__name = name
self.__age = age
def tell_info(self):
print(f"当前讲师是 :>>>> {self.__name} 年龄是 :>>>> {self.__age}")
teacher = Teacher(name="silence", age=18)
teacher.set_info(name='lj_happy',age='15')
teacher.tell_info()
【七】小结
【八】拓展:property
【1】什么是property
class Student:
def __init__(self, name):
self.name = name
@property
def vip_name(self):
return self.name
student = Student(name='silence')
print(student.name)
print(student.vip_name)
【2】BMI例子
class BMI:
def __init__(self, name, weight, height):
self.name = name
self.weight = weight
self.height = height
@property
def bmi(self):
return self.weight / (self.height ** 2)
dream = BMI(name='silence', weight=70, height=1.7)
print(dream.bmi)
【3】为什么要使用property
class PersonOne(object):
def __init__(self, name):
self.name = name
person_one = PersonOne(name='silence')
print(person_one.name)
person_one.name = '666'
print(person_one.name)
del person_one.name
print(person_one.name)
class Person(object):
def __init__(self, name):
self.__name = name
@property
def vip_name(self):
return self.__name
@vip_name.setter
def vip_name(self, value):
print(value)
self.__name = value
@vip_name.deleter
def vip_name(self):
del self.__name
person = Person(name='silence')
print(person.vip_name)
person.vip_name = 'happy'
print(person.vip_name)
del person.vip_name
print(person.vip_name)
class Person(object):
def __init__(self, name):
self.__name = name
def get_vip_name(self):
return self.__name
def set_vip_name(self, value):
print(value)
self.__name = value
def del_vip_name(self):
del self.__name
vip_name = property(get_vip_name, set_vip_name, del_vip_name)
person = Person(name='silence')
print(person.vip_name)
person.vip_name = 'happy'
print(person.vip_name)
del person.vip_name
print(person.vip_name)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY