在面向对象的编程中,通常很少让外部类直接访问类内部的属性和方法,而是向外部提供一些按钮,对其内部的成员进行访问,以保证程序的安全性,这就叫封装 。
@propertydef scores(self):print("该学生成绩为%s"%self.score)加上装饰器之后不用加括号可直接调用 。
类的继承面向对象编程最大的好处就是避免重复的代码,也就是将一段代码重复使用,方法之一就是继承 。
先定义一个基类或者父类,再通过class 类名(父类):pass创建子类,这样一来,子类获得了父类的所有属性和方法,这种现象就叫做继承 。
再写段代码,用Schoolmember表示父类,姓名和年龄是所有人的属性,然而老师有工资(salary)这个专有属性,学生有分数(score)这个专有属性
# 创建父类学校成员SchoolMemberclass SchoolMember:def __init__(self, name, age):self.name = nameself.age = agedef tell(self):# 打印个人信息print('Name:"{}" Age:"{}"'.format(self.name, self.age), end=" ")# 创建子类老师 Teacherclass Teacher(SchoolMember):def __init__(self, name, age, salary):SchoolMember.__init__(self, name, age) # 利用父类进行初始化self.salary = salary# 方法重写def tell(self):SchoolMember.tell(self)print('Salary: {}'.format(self.salary))# 创建子类学生Studentclass Student(SchoolMember):def __init__(self, name, age, score):SchoolMember.__init__(self, name, age)self.score = scoredef tell(self):SchoolMember.tell(self)print('score: {}'.format(self.score))teacher1 = Teacher("John", 44, "$60000")student1 = Student("Mary", 12, 99)teacher1.tell()# 打印 Name:"John" Age:"44" Salary: $60000student1.tell()# Name:"Mary" Age:"12" score: 99通过以上代码不难看出
- 在创建子类的过程中,需要手动调用父类的构造函数init来完成子类的创建 。
- 在子类中调用父类的方法时,需加上父类的类名前缀,且必须带self参数变量 。例SchoolMember.tell(self) 。
- 如果子类调用了每个方法或者属性,Python会先在父类中寻找,找不到就会去子类寻找 。
使用super()关键字调用父类在子类中可以使用super关键字直接调用父类中的属性或者方法,简化代码,也反映出人生苦短,我用Python的宗旨 。
# 创建子类学生Studentclass Student(SchoolMember):def __init__(self, name, age, score):SchoolMember.__init__(self, name, age)self.score = scoredef tell(self):super().tell() # 等同于 SchoolMember.tell(self)print('score: {}'.format(self.score))以上的例子中,学生子类调用了父类的tell方法,等同于SchoolMember.tell(self),使用super关键字调用时,需去掉括号里的self 。本次的分享就到这啦,如果对您有帮助的话,麻烦点个关注再走吧~感谢阅读 。
推荐阅读
- 如何跟踪log4j漏洞原理及发现绕WAF的tips
- 低成本防御网站 DDOS 攻击
- 浅析 Token 价值的意义及来源
- 深入理解 C 语言的 hello world
- 一文带你搞定TCP连接队列
- python初学者必须吃透的这些内置函数
- 红茶属于什么型,野生红茶的种类
- Python实现各种加密,接口加解密不说难
- 红茶种类有种茶叫梅战,安徽六安的瓜片红茶
- 外国红茶种类,世界红茶起源
