第8天 | 12天搞定Python,面向对象( 二 )
实例方法只能被实例对象访问 。 而静态方法、类方法既可被类访问 , 也可以被实例对象访问 。
# 类里的各种方法class Employee:# 构造方法def __init__(self, name, address):self.name = nameself.address = address# 实例方法def get_address(self):return self.address# 静态方法@staticmethoddef get_name():return "西门吹水"# 类方法@classmethoddef get_age(cls):return 38# 析构方法def __del__(self):print("释放资源")# 实例化c = Employee("程序员", "今日头条:老陈说编程")# 静态方法print(Employee.get_name())# 实力方法print(c.get_address())# 直接用类名调用print(Employee.get_age())
输出方法
西门吹水今日头条:老陈说编程38
8.6 数据封装数据封装是面向对象编程的一个重要特点 , 它通过限制访问 , 对数据进行保护 。 封装 , 即是在类内部 , 将某些不想被外部访问或调用的部分内容隐藏起来 , 如若外部要调用 , 只能通过公开的接口进行 。 Python语言没有private、protected这些关键字, 它用双下划线__表示私有类型(private)的属性或方法 。 以单下划线_开头的表示的是protected 类型的属性和方法 。
# 定义一个员工类class Employee:# 私有属性__age = 18# 私有属性__address = "广东"# 公有属性phone = 12345678910def __init__(self, name):self.name = name# 公有方法def get_age(self):return self.__age# 公有方法def get_name(self):return self.name# 私有方法def __get_address(self):return self.__addresse = Employee("王二麻子")print(e.phone)print(e.get_name())print(e.get_age())# 私有属性和方法不可调用# print(e.__age())# print(e.__get_address())
其实Python并没有真正的私有属性或方法 , 通过对象._类名__私有属性名或对象._类名__私有方法名 , 就可以访问私有属性或私有方法 。
# 定义一个员工类class Employee:# 私有属性__name = "酷哥"# 私有方法def __get_age(self):return 18e = Employee()# 私有属性或方法都可以访问print(e._Employee__name)print(e._Employee__get_age())
输出结果
酷哥18
8.7 None值Python语言中没有NULL值 , 有None值 。 Nono不是空 , 也不是0 。 它也是一种数据类型NoneType 。 判断一个对象是否为None值 , 可通过is进行 。
# None值n = Noneprint(n)print(type(n))if n is None:print("对象不存在")else:print("对象存在")# --not is 为反过来的判断—if n is not None:print("对象存在")else:print("对象不存在")
输出结果
None
8.8 继承即一个派生类(derived class)继承基类(base class)的字段和方法 。 继承也允许把一个派生类的对象作为一个基类对象对待 。 例如 , 有这样一个设计:一个Dog类型的对象派生自Animal类 , 这是模拟"是一个(is-a)"关系(例图 , Dog是一个Animal) 。
class ClassName(基类):
# 类定义class People:# 定义基本属性name = ''age = 0# 私有属性 , 体重(公斤)__weight = 0# 定义构造方法def __init__(self, n, a, w):self.name = nself.age = aself.__weight = wdef speak(self):print("%s说:我%d岁 。 " % (self.name, self.age))# 单继承示例class Teacher(People):grade = ''def __init__(self, n, a, w, g):# 调用父类的构函People.__init__(self, n, a, w)self.grade = g# 覆写父类的方法def speak(self):print("%s说: 我%d岁了 , 我在教%d年级" % (self.name, self.age, self.grade))s = Teacher('marry', 30, 65, 6)s.speak()
推荐阅读
- 手机照片、视频怎样添加文字?原来很简单,4种方法一分钟搞定
- 168天封顶!投资56亿重点AI项目将在上海竣工,提供世界领先算力支撑
- 仅用168天,商汤科技“新一代人工智能计算与赋能平台”项目结构封顶
- 从炼钢到轧钢一共要几步?武钢:“5G+AR”,一键搞定
- 百度|百度输入法“AI助聊”功能使用指南来了!纠错、预测、帮写轻松搞定
- 轻松搞定一天不插电办公 联想YOGA 13s 2021续航体验
- 8天卖出10万锅,“线上海底捞”浮出水面
- 第3天 | 12天搞定Python,用PyCharm编写代码
- 百度网盘下载太慢怎么办,一个软件帮你搞定,直接满速
- 原来华为手机秒变会议神器,开会再也不会手写,会议纪要轻松搞定