python 面对对象 类(继承, 多态)
继承,继承其它实例化样本的属性和方法,需要在声明里重新定义和使用
class School(object):
def __init__(self, name, addr):
self.name = name
self.addr = addr
self.student = [] # 用于进行学生类的存储
self.teacher = [] # 用于进行老师类的存储
def enroll(self, stu_obj):
print('招录进来学生%s'%stu_obj.name)
self.student.append(stu_obj) # 将学生类进行添加
def hire(self, staff_obj):
print('招募老师%s'%staff_obj.name)
self.teacher.append(staff_obj) # 将老师类进行添加 class Schoolmember(object): # 创建学校成员的父类
def __init__(self, name, age, sex): # 定义初始变量
self.name = name # 定义名字
self.age = age # 定义年龄
self.sex = sex # 定义性别
def teach(self): # 定义父类属性
pass class Teacher(Schoolmember): # 定义老师属性,继承父类
def __init__(self, name, age, sex, salary, course): # 变量声明
super(Teacher, self).__init__(name, age, sex) # 变量继承
self.salary = salary
self.course = course
def tell(self):
print('''
---info---%s
name %s
age %s
sex %s
salary %s
course %s
'''%(self.name, self.name, self.age, self.sex, self.salary, self.course))
def teach(self):
print('%s is teaching'%self.name) class Student(Schoolmember):
def __init__(self, name, age, sex, stu_id, grade):
super(Student, self).__init__(name, age, sex)
self.stu_id = stu_id
self.grade = grade def tell(self):
print('''
---info---%s
name %s
age %s
sex %s
stu_id %s
grade %s
''' % (self.name, self.name, self.age, self.sex, self.stu_id, self.grade))
def paid_tution(self, money):
print('%s has paid tution for $%s'%(self.name, money)) # 创建实例
school = School('oldboy', '沙河') s1 = Student('aaa', 22, 'M', '', 'python')
s2 = Student('bbb', 23, 'F', '', 'linux') t1 = Teacher('ccc', 333, 'W', 10000, 'python')
t2 = Teacher('ddd', 444, 'F', 20000, 'linux') school.enroll(s1)
school.hire(t1)
school.teacher[0].teach()
for stu in school.student:
stu.paid_tution(20000)
多态: 表示在父类里定义一个函数,在子类里都可以使用
class Animal(object):
def __init__(self, name): # 初始化
self.name = name
@staticmethod # 静态变量装饰器, 这样不需要输入self变量
def animal_talk(obj):
obj.talk() class dog(Animal): # 定义dog类, 继承Animal
def __init__(self, name):
super(dog, self).__init__(name) def talk(self): # 定义函数属性
print('wowo') class cat(Animal):
def __init__(self, name):
super(cat, self).__init__(name) def talk(self):
print('Meow') c = cat('aaa') # 实例化
d = dog('bbb')
Animal.animal_talk(c) # 调用Animal里面的属性
Animal.animal_talk(d)
python 面对对象 类(继承, 多态)的更多相关文章
- 干货:python面对对象类继承简介
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python视觉算法 PS:如有需要Python学习资料的小伙伴可以加 ...
- 小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系)
小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系 1. 依赖关系. 最轻的一种关系 在方法中引入另一个类的对象 class Elephant: def __init__(sel ...
- 16、python面对对象之类和继承
前言:本文主要介绍python面对对象中的类和继承,包括类方法.静态方法.只读属性.继承等. 一.类方法 1.类方法定义 使用装饰器@classmethod装饰,且第一个参数必须是当前类对象,该参数名 ...
- Python - 面对对象(基础)
目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
- 15、python面对对象之类和对象
前言:本文主要介绍python面对对象中的类和对象,包括类和对象的概念.类的定义.类属性.实例属性及实例方法等. 一.类和对象的概念 问题:什么是类?什么是实例对象? 类:是一类事物的抽象概念,不是真 ...
- Python - 面对对象(进阶)
目录 Python - 面对对象(进阶) 类的成员 一. 字段 二. 方法 三. 属性 类的修饰符 类的特殊成员 Python - 面对对象(进阶) 类的成员 一. 字段 字段包括:普通字段和静态字段 ...
- Python - 面对对象(其他相关,异常处理,反射,单例模式,等..)
目录 Python - 面对对象(其他相关,异常处理,反射,等..) 一.isinstance(obj, cls) 二.issubclass(sub, super) 三.异常处理 1. 异常处理 2. ...
- 小学生绞尽脑汁也学不会的python(面对对象-----成员)
小学生绞尽脑汁也学不会的python(面对对象-----成员) 成员 class Person: def __init__(self, name, num, gender, birthday): # ...
随机推荐
- 分布式缓存Redis+Memcached经典面试题和答案
Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 ( ...
- Cannot assign to read only property 'exports' of object at webpack ....BaseClient
网上找了很多资料说是import和export不能一起用,改代码 其实根本原因是es6和es5混合使用造成的兼容性问题 只需要配置.babelrc就可以了 首先安装 npm install -D tr ...
- 中断或取消Promise链的可行方案
ES6标准引入的异步编程解决方案Promise,能够将层层嵌套的回调转化成扁平的Promise链式调用,优雅地解决了“回调地狱”的问题.当Promise链中抛出一个错误时,错误信息沿着链路向后传递,直 ...
- 【异常】Could not find artifact com.wm.****:
1 详细异常 [ERROR] Failed to execute goal on project spark-etl: Could not resolve dependencies for proje ...
- 清除input输入框的历史记录
当之前的input框输入了数据后,下次输入有历史记录问题的解决方法 <input id="vhcl_no" type="text" autocompl ...
- LeetCode02 - 两数相加(Java 实现)
LeetCode02 - 两数相加(Java 实现) 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 题目描述 ...
- python: 错误处理try详解 ,traceback调用栈, 调试(logging)
摘录:https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736 错误处理 调试 错误处理 高级语言都会使用内置的一套try. ...
- UnexpectedRollbackException解决方案
前言 最近在项目中发现了一则报错:“org.springframework.transaction.UnexpectedRollbackException: Transaction rolled ba ...
- pro git 读书笔记 3 Git 分支
分支 新建分支:git branch 分支名 切换到该分支:git checkout 分支名 补充:以上两条语句等价于一句:git checkout -b 分支名 转换分支的时候最好保持一个清洁的工作 ...
- call和ret指令
call和ret都是用来修改ip或cs:ip,可以用来实现子程序的设计: 1.ret和retf ret ->修改ip的内容,从而实现近转移: retf ->同时修改cs和i ...