python编程面向对象类(2)
(11) 成员可见性公开和私有
类的方法也可以调用方法class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age def have_class(self): print("have class") def have_english_class(self): self.have_class() print("have english class") student1 = StudentClass("cici", 18) student1.have_english_class() 输出: have class have english class
类的变量和方法可以被对象调用,不具备安全性。
对象更改、建议在内部方法做判断,保证安全性。class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age self.score = 0 def class_score(self, score): if self.score == 0: print("不允许更改") else: self.score = score print(self.score) student1 = StudentClass("cici", 18) student1.class_score(100) 输出: 不允许更改 0
因为变量是公开的,所以可以访问和赋值,私有的则不可以。
表示私有:__ 双下划綫写在名字开头class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age self.score = 0 def __class_score(self, score): if self.score == 0: print("不允许更改") else: self.score = score print(self.score) student1 = StudentClass("cici", 18) student1.class_score(100) 输出: AttributeError: "StudentClass" object has no attribute "class_score"
通过点,给student1加上一个属性class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age self.__score = 0 def __class_score__(self, score): if self.score == 0: print("不允许更改") else: self.score = score print(self.score) student1 = StudentClass("cici", 18) student1.__score = 100 # 通过点,给student1加上一个属性 student1.aaa = "aaa" print(student1.aaa) print(student1.__score) print(student1.__dict__) student2 = StudentClass("cici", 18) print(student2.__dict__) 输出: aaa 100 {"name": "cici", "age": 18, "_StudentClass__score": 0, "__score": 100, "aaa": "aaa"} {"name": "cici", "age": 18, "_StudentClass__score": 0}
(12) 没有什么是不能访问
python是没有严格意义上的私有变量的,可以通过被更换过后的名字获得class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age self.__score = 0 def __class_score__(self, score): if self.score == 0: print("不允许更改") else: self.score = score print(self.score) student1 = StudentClass("cici", 18) student1.__score = 100 # 通过点,给student1加上一个属性 print(student1._StudentClass__score) 输出: 0
(13) 继承
面向对象三大特性:继承性、封装性、多态性# 在d1中的脚本 class Human: human_sum = 100 def __init__(self, name, age): self.name = name self.age = age def get_name(self, score): print(self.name)# 在d2的脚本 from d1 import Human class StudentClass(Human): def have_class(self): print("have class") print(StudentClass.human_sum) # 继承了父类的__init__ student1 = StudentClass("cici", 18) # 继承了父类的变量 print(student1.human_sum) print(student1.name) print(student1.age) 输出: 100 100 cici 18
(14) 子类方法调用父类方法super关键字# 在d1中的脚本 class Human: human_sum = 100 def __init__(self, name, age): self.name = name self.age = age def get_name(self, score): print(self.name) # 在d2的脚本 from d1 import Human class StudentClass(Human): def __init__(self, school, name, age): self.school = school # 在子类里面调用父类的构造函数 Human.__init__(self, name, age) def have_class(self): print("have class") # 继承了父类的__init__ student1 = StudentClass("第一中学", "cici", 18) # 继承了父类的变量 print(student1.school) print(student1.name) print(student1.age)
Human.__init__(self, name, age) 在类里调用实例方法是没有意义的。
没有通过实例对象来调用,所以需要加上self。class StudentClass(Human): def __init__(self, school, name, age): self.school = school Human.__init__(self, name, age) def have_class(self): print("have class") StudentClass.have_class() 输出: TypeError: StudentClass.have_class() missing 1 required positional argument: "self"class StudentClass(Human): def __init__(self, school, name, age): self.school = school # 在子类里面调用父类的构造函数 Human.__init__(self, name, age) def have_class(self): print("have class") StudentClass.have_class(student1) #这样多此一举 输出: have class
主流的调用父类方法的方式:super(子类名字, self).__init__()# 在d1的脚本 class Human: human_sum = 100 def __init__(self, name, age): self.name = name self.age = age def have_class(self): print("have class : Human") # 在d2的脚本 from d1 import Human class StudentClass(Human): def __init__(self, school, name, age): self.school = school super(StudentClass, self).__init__(name, age) def have_class(self): print("have class : StudentClass") super(StudentClass, self).have_class() # 可以在方法里调用父类的方法 # 继承了父类的__init__ student1 = StudentClass("第一中学", "cici", 18) print(student1.school) print(student1.name) print(student1.age) student1.have_class() # 优先调用子类方法 输出: 第一中学 cici 18 have class : StudentClass have class : Human
司马南爆料联想问题,是真实的,还是炒作?哪里是爆料?你没学过阅读理解?是根据联想公开的资料提出的质疑。有理有据令人信服!!!联想高管拿一亿多年薪,退休了都近一亿,而且公司资不抵债。还想上市套股民的钱,吃相太难看。说好的共
苹果要造电动车?总市值一日涨超700亿美元,重回全球第一中新经纬11月19日电综合多家外媒消息,苹果公司最早将于2025年推出完全自动驾驶的汽车。据华尔街日报中文网援引彭博社报道称,苹果公司正在加快电动汽车的开发工作,目标是实现完全自动
魅蓝难归?作者云梦泽编辑周烨时隔1269天,搁浅的魅蓝手机要重回江湖。近日,魅蓝科技在新浪微博连发多条图文,酝酿情怀的同时,正式官宣魅蓝手机即将回归。值得一提的是,在发布公告中并没有对外公开
三年前把申通卖给马云,套现146亿后,如今的陈小英怎么样了?说到申通,我们就会想起圆通中通还有韵达,三通一达只要我们网上购物除了顺丰大部分都是用这四家快递,很多不了解的人会以为这四家快递的老板会是完全没有交集的四个人,而实际上,之所以出现三
有多少人现在已经把支付宝卸载了?我从来不用微信支付,微信就是聊天的,其他没啥用!付款就用支付宝付,还可以种树喂鸡和运动步数记录,太喜欢了!我为什么要卸载支付宝,支付宝可做买理财,买基金,支付宝提现可以用积分换,我
近1500万司机流失,滴滴能度过这个寒冬吗?滴滴不差司机,很多新人挤着冲进网约车的,而且都是电的,疫情开始就没去跑,一天天没几单,95都八块了,还是干点别的吧现在网约车严重内卷,连特惠单出来一下就秒了。严重性的僧多肉少!滴滴
怎么认识联想引起的争议最近小伙伴们热议联想的事,作为专注于国资科技成果转化和科技创业的知本院老师,我觉得有必要谈谈看法。首先,看看联想为啥引起这么大争议?一是联想多年来作为中国科技企业的代表,柳老先生作
独立服务器是什么,有哪些用途?1独立服务器是来搭建网站,运行程序,拥有整台服务器资源,就想生活在公寓里,必须共享一切。2独立服务器运行时间,独享最高性能,连接速度更快,减少病毒攻击的风险,独立服务器不是专门为一
司马南手撕联想视频被下架,这回他真的能成侠吗?司马南,这一次是真正敢言者!碰拳碰拳如他说的不实,联想或柳家应该可以找律师协助,大可不必约两场饭局。这下柳家和联想就尴尬了,敢告司马南绯谤吗?司马说柳是买办,有什么不妥与争议吗?司
粉丝10万就可以专职干头条了吗?今日头条出台了一个计划,你有十万粉丝,就可以申请成为头条全职创作者,有底薪有各种扶持。不过,签约时,官方一定会评估你的账号价值。不是说你有十万粉丝就够了,这十万粉丝是怎么得来的?什
共同富裕大背景下,网约车司机是否迎来春天?只要滴滴还是绝对垄断地位,只要滴滴不做到严格执行双证合规政策,对待国家法律法规阳奉阴违。即便是全体国人都实现共同富裕,网约车司机也是在滴滴这个万恶资本家的血腥压榨下艰难生存。换句话