Python中的面向对象(高级)之私有方法多继承多态
一。私有方法与私有属性
特征:私有属性与私有方法不能从外部被调用,也不能被子类继承
唯一写法:在属性或方法前面加上__(两个下划线)
我们写一个简单的例子,创建一个类,包含私有方法、私有属性、普通方法、普通属性,并生成一个实例class Class_test1: __str1="好好学习"#私有属性 str2="天天向上"#普通属性 def __method1(self): #私有方法 print("这是一个私有方法") def method2(self):#普通方法 print("这是一个普通方法") cls1=Class_test1()#实例化一个对象用实例调用私有属性print(cls1.__str1)#调用私有属性 >>>报错 AttributeError: "Class_test1" object has no attribute "__str1"用实例调用普通属性print(cls1.__str2)#调用普通属性 >>>天天向上用实例调用私有方法cls1.__method1()#调用私有方法 >>>报错 AttributeError: "Class_test1" object has no attribute "__method1"实例调用普通方法cls1.method2()#调用普通方法 >>> 这是一个普通方法
私有属性和私有方法可以从内部被调用(总不能我写了,但是哪都不让用吧)
我们试试在类里再加入一个新的方法,调用私有方法和属性class Class_test1: __str1="好好学习"#私有属性 str2="天天向上"#普通属性 def __method1(self): #私有方法 print("这是一个私有方法") def method2(self):#普通方法 print("这是一个普通方法") def method3(self):#普通方法 print(self.__str1) self.__method1() cls1=Class_test1()#实例化一个对象 cls1.method3()#用实例调用method3方法 >>> 好好学习 这是一个私有方法
可以看到,私有属性和私有方法是可以在类内部被调用的。应用场景
举个私有属性应用场景的例子class Girl: def __init__(self,name): self.name = name self.__age = 18#女孩的年龄不要问 cyy = Girl("仙女") print(cyy.name) >>>仙女 print(cyy.__age) >>> AttributeError: "Girl" object has no attribute "__age"
二。object类
python3中,所有的类都是object的子类(无论是否声明),比如我们之前用到的初始化方法__init__()、单例模式__new__(),之所以能直接用,就是因为这些方法是只在object类中定义好了的。
我们试一下class Class2: pass print(Class2.__bases__)#显示所有父类的名称 >>> (,)#以元组形式返回所有父类
print(Class2.__dict__) #显示类的属性 >>>"__module__": "__main__", "__doc__": "这是一个啥都没写的类", "__dict__": , "__weakref__": } print(Class2.__doc__) #显示类的注释 >>>这是一个啥都没写的类 print(Class2.__name__) #显示类的名称 >>>Class2 print(Class2.__base__) #显示父类的名称 >>>
三。多继承
一个子类可以继承多个父类,用逗号隔开class Dad1: def property1(self): print("给你一栋楼") class Dad2: def property2(self): print("给你一个亿") class Son(Dad2,Dad1):#继承2个类 pass xiaoming = Son()#实例化一个对象,小明 xiaoming.property1() >>>给你一栋楼 xiaoming.property2() >>>给你一个亿 #可以看到,两个父类的方法都可以用
多个父类中有同名方法时,按照继承顺序进行调用class Dad1: def property(self): print("给你一栋楼") class Dad2: def property(self): print("给你一个亿") class Son(Dad2,Dad1): #多个父类中有同名方法时,按照继承顺序进行调用 pass xiaoming = Son() xiaoming.property() >>>给你一个亿 #两个父类里都有property方法 #因为继承时Dad2在前,所以调用的是Dad2里的property方法,只能继承一个亿了。
四。多态
当不同的实例,有同名的方法时,我们可以一个函数,传入不同的实例,执行对应的方法。
我们定义一个猫和一个狗的类,两个类中都有"叫"的方法。并各生成一个实例。class Dog: def say(self): print("汪汪汪") class Cat: def say(self): print("喵喵喵") dog=Dog()#狗实例 cat=Cat()#猫实例
定义一个函数,用函数来调用"叫"的方法def animal_say(animal):#参数animal用来接收实例 return animal.say()#传的是哪个实例就调用谁的say方法 animal_say(dog) >>>汪汪汪 animal_say(cat) >>>喵喵喵
这就叫多态。
朱华荣世界级中国汽车品牌必有长安8月24日,由长安汽车主办的2021长安汽车科技生态大会正式开幕,长安汽车对外发布了企业新汽车新生态发展战略,并首度亮相了阿维塔科技旗下高端智能电动车品牌的代号为E11的首款产品长
绝对实力中国体操完美收官谢思埸三米板摘金想奖励自己一瓶可乐北京时间8月3日,东京奥运会比赛第11天,今天收获3金4银跳水1金1银,体操2金1银,田径链球1银,划艇1银。第30金!跳水男子单人3米板谢思埸夺冠王宗源获亚军跳水男子单人三米板决
几乎贵一倍坦克600就是坦克300的豪华版?近日,据扉旅汽车小编获悉,坦克品牌旗下的第二款车型坦克600(坦克600更名为坦克500),即将在长城汽车荆门工厂下线。将在本月29日开幕的成都车展上完成它的全球首秀仪式。对于坦克
领势Wifi6AX3200体验万物互联首选今年要说最火的路由应该是WiFi6路由,如今的高端路由器市场已经被华硕网件Linksys思科等传统厂商所占据,但是高端路由器还比较贵,其实主要是高端路由器在无线规格硬件性能做工和用
一汽奔腾T99,硬派基因下的野心与担当硬派捍卫者,国货之光,朱亚文。一场直播留言中这三个关键词不断刷屏,而将他们串联一起的竟源自一款车。8月17日晚间,2022款奔腾T99以硬派捍卫者为名正式上市,实力派演员朱亚文也以
爬坡加速,大众ID。系列渐入佳境?经过数月磨合,终于有所突破。7月,大众系销量不理想,但数据中也并非没有亮点。以上汽大众公布的最新销量数据为例,除了单一品牌销量仍盘踞首位之外,上汽大众ID。家族(ID。4XID。6
吉利汽车半年报挣钱能力依旧,新能源心结难解符合此前市场预期。8月18日午间,吉利汽车发布2021年上半年财报。财报显示,今年上半年,吉利汽车营收达450亿元,同比增长22股东应占溢利为23。81亿元,同比增长3。67净利润
扒一扒汽车与二次元的那些事儿,大众雪佛兰们姿势对吗?老二次元的盛宴?近日,电视剧你是我的荣耀终于迎来大结局。在其热播期间不仅连连冲上微博热搜,扉旅汽车小编的微信朋友圈也是被好友频繁刷屏,让人想不看都难,不爱追新剧,只偏爱老剧的小编终
电动战略又更新了,宝马还是那个激进的少年我还是从前那个少年,没有一丝丝改变。近日,据媒体报道,宝马集团方面表示,其计划在未来两年内发布4款纯电动汽车。到2023年将在全球提供约12款纯电动车型,计划推出纯电动BMW5系B
G50PLUS上市10。98万起,为多孩家庭出行量身定制随着科技的发展,人们的日常生活早已离不开智能化产品,从居家时的各类家居,到工作时的线上会议,都需要智能化产品的加持。而在日常出行场景中,同样需要一款智能懂人的汽车产品,为出行生活添
零跑汽车朱江明鸡血有了,牛皮也吹了,哗众取宠只为生存?左传昭公十五年有这样一句话力能则进,否则退,量力而行。不久前,当掌舵人朱江明在零跑汽车2。0时代的战略发布会上亮相时,那番举止言谈,似乎显得有些不量力了。作为零跑汽车的创始人董事长