第8天 | 12天搞定Python,面向对象( 二 )
# 定义一个员工类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()
输出结果
marry说: 我30岁了 , 我在教6年级
请注意 , 请注意 , Python可支持多继承 , 语法是:class ClassName(基类1, 基类2, 基类3):
8.9 方法重写如果你的父类方法的功能不能满足你的需求 , 你可以在子类重写你父类的方法 。 可用super() 函数调用父类(超类)的方法 。
# 定义父类class Parent:def m(self):print('调用父类方法')class Child(Parent):# 定义子类def m(self):print('调用子类方法')c = Child()# 子类实例c.m()# 子类调用重写方法super(Child, c).m()
输出结果
调用子类方法调用父类方法
8.10 对象判断判断两个标识符是否引用同一个对象时,可以用is进行比较 , 还可以用相反的方式 , is not进行比较 。 is 跟 == 的区别是:is用于判断两个变量是否引用同一个对象 , ==是比较两个变量的值是否相等 。 可通过id()函数获得对象引用地址 。
# 定义父类class Parent:def m(self):print('调用父类方法')class Child(Parent):# 定义子类def m(self):print('调用子类方法')p = Parent()c = Child()# 子类实例print(c is p)# 数组a = (5, 6, 8)b = aprint(id(a), id(b))print(a is b)print(a, "==", b)print(a == b)
输出结果
False140317976246976 140317976246976True(5, 6, 8) == (5, 6, 8)True
好了 , 有关面向对象的内容 , 老陈讲完了 , 如果觉得对你有所帮助 , 希望老铁能转发点赞 , 让更多的人看到这篇文章 。 你的转发和点赞 , 就是对老陈继续创作和分享最大的鼓励 。
一个当了10年技术总监的老家伙 , 分享多年的编程经验 。 想学编程的朋友 , 可关注今日头条:老陈说编程 。 我将分享Python , 前端(小程序)和App方面的编程知识 。 关注我 , 没错的 。
8.11 枚举类型枚举语法跟类差不多 , 放在一起学习效果更好 。枚举(Enum)跟整型一样 , 是一种数据类型 。 它是一系列常量的集合 , 通常用于表示某些特定的有限集合 , 如月份、星期、状态、性别(男、女、不男不女)等 , 当一个变量有几种可能取值的时候 , 定义为枚举类型 。
1. 枚举定义
枚举是不可变类型 , 一旦定义创建 , 其成员的值不可改变 , 名称不可重复 , 通过class关键字和继承Enum类进行定义 。 定义时若出现成员的值相同 , 那只有第一个有效 , 其语法结构为:
class 枚举名(Enum):
成员名1 = 值1
成员名x = 值n
# ---引入枚举类---from enum import Enumclass Colors(Enum):red = 1orange = 2yellow = 3green = 4red_alias = 1print(Colors(1))
- 智能手机市场|华为再拿第一!27%的份额领跑全行业,苹果8%排在第四名!
- 同比|亚马逊公布“剁手节”创纪录战绩:第三方卖家全球销售额超48亿美元 同比大增60%
- 产业|前瞻生鲜电商产业全球周报第67期:发力社区团购!京东内部筹划“京东优选”
- 零部件|马瑞利发力电动产品,全球第七大零部件供应商在转型
- 互联网|苏宁跳出“零售商”重组互联网平台业务 融资60亿只是第一步
- 俄罗斯手机市场|被三星、小米击败,华为手机在俄罗斯排名跌至第三!
- 当初|这是我的第一部华为手机,当初花6799元买的,现在“一文不值”?
- 出海|出海日报丨短视频生产服务商小影科技完成近4亿元 C 轮融资;华为成为俄罗斯在线出售智能手机的第一品牌
- 敢动|女生最害怕被“偷看”的3软件,QQ不算啥,第二敢动就“翻脸”
- 报名啦!宿迁开展第五届“十大科技之星”评选